2009-07-31 68 views
0

我真的和NSStrings混淆。就像當我應該做的iPhone Dev - NSString創建

NSString *aString = @"Hello"; 
的應該是

NSString *aString = [[NSString alloc] initWithString:@"Hello"]; 

但後來它的不同,當你將值分配給一個NSString財產,不是嗎? 有人可以幫我解決這個問題嗎?

謝謝!

回答

2

一般來說,你應該做的第一,但他們大多在功能上是相同的。你可以把常量NSString的就像正常的NSString字符串對象,例如:

[@"Hello" length] 

將返回5.您可以將它們分配到的屬性,一切只是工作。你可能會注意到的一點是,對於常量NSString,你不必擔心保留/釋放。這是因爲它們實際映射到應用程序的只讀數據部分,並沒有分配內存。保留並釋放針對他們的通話仍然有效,他們只是成爲noops。

0
NSString *aString = @"Hello"; 

將創建一個autoreleased字符串。也就是說,如果你不明確retain它,它可能會在你的方法結束後消失(有時候完全沒問題)。但是如果你想要堅持過去那段時間,你需要保留它。

如果你創建一個這樣

@property (retain) NSString *aString; 

該字符串的屬性,然後分配是這樣的:

self.aString = @"Hello"; 

那麼你已經正確保留了字符串,它會堅持圍繞。

另一方面,使用alloc, init將爲您創建一個保留數爲1的字符串,如果您不需要它通過該方法,則應該爲release它。

****編輯:@「你好」不是一個自動發佈的字符串,正如其他人指出的那樣。我的錯。 ****

+0

這是不正確的。你不需要保留一個常量NSString。它不是創建自動發佈的,它是NSString類集羣的特殊子類,它不分配任何內存,因爲它映射到程序的只讀頁面。 – 2009-07-31 02:11:55

+0

你沒有看到我的編輯? – jbrennan 2009-07-31 02:48:08