2013-01-04 30 views
1

我正在關注的objc教程使用以下初始化:(可能是很簡單的)initWithString似乎不工作

NSString* p = [[NSString alloc] initWithString:@"something"]; 

然而,在前面的章節中指出相同的教程,這些類型構造的可被分解成像件:

NSString* p = [NSString alloc]; 
[p initWithString: @"something"]; 

然而,如果我嘗試來顯示使用的NSLog p的值,異常occures:

main: Uncaught exception NSInternalInconsistencyException, reason: attempt to use uninitialised string 

這可能很容易,但我似乎無法找到答案。

+0

在什麼時候你試圖顯示'p'? –

+0

在initWithString之後,當然:) –

+2

NSString * p = @「something」;更容易。我相信當使用stringWithString時,LLVM甚至會向您發出警告:帶有文字字符串。 – Taum

回答

6

你有你的變量設置爲初始化的返回值:

NSString* p = [NSString alloc]; 
p = [p initWithString: @"something"]; 
+0

是的,它做到了:)謝謝!這對我來說並不是很直觀,因爲我期望一些名爲「init」的東西來實際初始化:) –

2

這是NSObject手冊,關於init方法:

在某些情況下,init方法可能會返回一個替代對象。因此,您必須在隨後的代碼中始終使用由init返回的對象,而不是由alloc或allocWithZone:返回的對象。

相關問題