1

我正在关注的 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

这可能是一个简单的问题,但我似乎无法找到答案。

4

2 回答 2

6

您必须将变量设置为 init 的返回值:

NSString* p = [NSString alloc];
p = [p initWithString: @"something"];
于 2013-01-04T22:31:14.403 回答
2

这是来自NSObject的手册,关于 init 方法:

在某些情况下,init 方法可能会返回一个替代对象。因此,在后续代码中,您必须始终使用 init 返回的对象,而不是 alloc 或 allocWithZone: 返回的对象。

于 2013-01-04T22:48:56.307 回答