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];
我认为后者仅仅是前者的收缩(但我显然是错的,至少根据编译器而言)。
答案 0 :(得分:4)
因为-initWithFormat:
返回的对象与+alloc
返回的对象不同,即对象与myString
指向的对象不同。这就是为什么你应该总是将+alloc
与-init…
结合在一起的原因。
这种情况在NSString
等类集群中很常见。 +alloc
返回一个通用字符串对象,然后-initWithFormat:
决定NSString
的具体子类,释放由+alloc
创建的当前对象,从具体的子类中创建一个新对象。 NSString
,然后返回此新对象。
答案 1 :(得分:0)
NSString *myString = [[NSString alloc] init];
或
NSString *myString = [NSString new];