的NSString讓我們假設myProp是@property(保留)的NSString * myProp爲我們合成....字符串或用繩子
self.myProp = @"some value";//string literal?
self.myProp = [NSString stringWithString:@"some value"];
之間有區別嗎? 是第一個沒有獲得自動釋放的字符串字面值,還是僅僅在內存中,因爲它是當前的範圍,我不必擔心它?
的NSString讓我們假設myProp是@property(保留)的NSString * myProp爲我們合成....字符串或用繩子
self.myProp = @"some value";//string literal?
self.myProp = [NSString stringWithString:@"some value"];
之間有區別嗎? 是第一個沒有獲得自動釋放的字符串字面值,還是僅僅在內存中,因爲它是當前的範圍,我不必擔心它?
您可能想花一些時間與String Programming Guide。從連接部分(有關創建@"string constants"
):
這樣的對象是在編譯時 創建和整個 程序的執行存在。編譯器 在每個模塊基礎上使這些對象常量在 上唯一,並且它們從不從 解除分配,儘管您可以保留並且 釋放它們,就像您執行其他任何 對象一樣。
謝謝,那就是我的想法。看起來我會繼續使用我的NSString對象。 – joels 2010-04-09 15:18:36
字符串文字是一個硬編碼的NSString,它在應用程序運行時無限期地存在。您甚至可以發送NSString響應的消息,例如[@"test" length]
。
要回答你的問題,第一行是將屬性設置爲字符串文字,而第二行是通過基於字符串文字創建新字符串的額外步驟。
要添加到約書亞和普雷斯頓的帖子,其實[NSString stringWithString:xxx]
返回xxx
本身,當xxx
是一個文字。 這是一個實現細節,所以你不應該寫任何依賴這個事實的程序,但是知道這很有趣。
您可以檢查這個事實如此:
NSString*[email protected]"foo";
NSString*b=[NSString stringWithString:a];
NSLog(@"a at %p, class %@",a,[a class]);
NSLog(@"b at %p, class %@",b,[b class]);
至少在我的10.6.3中,都給予同樣的地址,與NSCFString
類。
切記:retain
& release
關心您對所有權的責任,並且他們並不總是減少/增加保留計數。只要所述優化不打破所有權策略,該實現可以做任何它想要的優化。或者換句話說:寫retain
& release
這樣,如果實現總是保留計數的天真增加/減少,那麼這些對象將被保留/銷燬。這是Cocoa和你之間的合同。但可可可以做,並確實做了很多優化。
因爲這個掛起了很多人。 – 2010-04-07 17:11:14
只要使用字符串文字,如果你不確定,他們總是正確的選擇。 – 2010-04-07 17:26:53