我正在关注的objc教程使用以下初始化:
NSString* p = [[NSString alloc] initWithString:@"something"];
然而,前一章中所述的相同教程可以将这些类型的结构分解为:
NSString* p = [NSString alloc];
[p initWithString: @"something"];
但是,如果我尝试使用NSLog显示 p 的值,则会发生异常:
main: Uncaught exception NSInternalInconsistencyException, reason: attempt to use uninitialised string
这可能很容易,但我似乎无法找到答案。
答案 0 :(得分:6)
您必须将变量设置为init的返回值:
NSString* p = [NSString alloc];
p = [p initWithString: @"something"];
答案 1 :(得分:2)
这是来自NSObject的手册,关于init方法:
在某些情况下,init方法可能会返回替换对象。因此,您必须始终在后续代码中使用init返回的对象,而不是alloc或allocWithZone:返回的对象。