2011-05-15 39 views
4

Objective-C noob here。NSString初始化

爲什麼會變成這樣:

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

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

當這個工作得很好:

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

我認爲後者僅僅是一個收縮(但我明顯錯了,至少根據編譯器)。

回答

4

因爲-initWithFormat:返回的對象與+alloc返回的對象不同,即與myString指向的對象不同。這就是爲什麼你總是應該使用+alloc-init…

這種情況在類羣中很常見,例如NSString+alloc返回通用字符串對象,然後-initWithFormat:決定NSString的具體子類,取消分配由+alloc創建的當前對象,從NSString的具體子類創建新對象,然後返回此新對象。

+0

現在有道理,謝謝。 – BlazingFrog 2011-05-16 00:15:24

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

NSString *myString = [NSString new];