我真的和NSStrings混淆。就像當我應該做的iPhone Dev - NSString創建
NSString *aString = @"Hello";
的應該是
:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
但後來它的不同,當你將值分配給一個NSString財產,不是嗎? 有人可以幫我解決這個問題嗎?
謝謝!
我真的和NSStrings混淆。就像當我應該做的iPhone Dev - NSString創建
NSString *aString = @"Hello";
的應該是
:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
但後來它的不同,當你將值分配給一個NSString財產,不是嗎? 有人可以幫我解決這個問題嗎?
謝謝!
一般來說,你應該做的第一,但他們大多在功能上是相同的。你可以把常量NSString的就像正常的NSString字符串對象,例如:
[@"Hello" length]
將返回5.您可以將它們分配到的屬性,一切只是工作。你可能會注意到的一點是,對於常量NSString,你不必擔心保留/釋放。這是因爲它們實際映射到應用程序的只讀數據部分,並沒有分配內存。保留並釋放針對他們的通話仍然有效,他們只是成爲noops。
NSString *aString = @"Hello";
將創建一個autoreleased
字符串。也就是說,如果你不明確retain
它,它可能會在你的方法結束後消失(有時候完全沒問題)。但是如果你想要堅持過去那段時間,你需要保留它。
如果你創建一個這樣
@property (retain) NSString *aString;
該字符串的屬性,然後分配是這樣的:
self.aString = @"Hello";
那麼你已經正確保留了字符串,它會堅持圍繞。
另一方面,使用alloc, init
將爲您創建一個保留數爲1的字符串,如果您不需要它通過該方法,則應該爲release
它。
****編輯:@「你好」不是一個自動發佈的字符串,正如其他人指出的那樣。我的錯。 ****
這是不正確的。你不需要保留一個常量NSString。它不是創建自動發佈的,它是NSString類集羣的特殊子類,它不分配任何內存,因爲它映射到程序的只讀頁面。 – 2009-07-31 02:11:55
你沒有看到我的編輯? – jbrennan 2009-07-31 02:48:08