NSString初始化

时间:2011-05-15 23:56:31

标签: cocoa nsstring

Objective-C noob here。

为什么会这样:

NSString *myString = [NSString alloc];
[myString initWithFormat:@"%f", storedNumber];  

导致以下异常-length only defined for abstract class. Define -[NSPlaceholderString length]!

当这个工作正常时:

NSString *myString = [[NSString alloc] initWithFormat:@"%f", storedNumber];

我认为后者仅仅是前者的收缩(但我显然是错的,至少根据编译器而言)。

2 个答案:

答案 0 :(得分:4)

因为-initWithFormat:返回的对象与+alloc返回的对象不同,即对象与myString指向的对象不同。这就是为什么你应该总是将+alloc-init…结合在一起的原因。

这种情况在NSString等类集群中很常见。 +alloc返回一个通用字符串对象,然后-initWithFormat:决定NSString的具体子类,释放由+alloc创建的当前对象,从具体的子类中创建一个新对象。 NSString,然后返回此新对象。

答案 1 :(得分:0)

NSString *myString = [[NSString alloc] init];

NSString *myString = [NSString new];