2010-02-19 143 views
4

我在這裏看到了一些關於使用保留或複製字符串的問題。我仍然無法理解差異或重要性。NSString保留副本問題

在我的情況下,目前我有一個類的整個負載nsstrings來保存字符串。

我希望這個類只能實例化一次,我希望它的nsstring變量根據在表視圖中單擊的索引進行更改。

如果我選擇使用保留,我的nsstrings將被覆蓋每次我在我的tableview點擊設置它們的值,如果我選擇複製,我會以某種方式有每個字符串2個實例.. ..?

對不起.....我完全不明白這一點

回答

6

這是一個有關複製可變對象與一成不變的人的問題。由於NSString對象是不可變的(你不能改變它們的內容),它們實現-copy這樣的:

- (id) copyWithZone: (NSZone *) zone 
{ 
    return [self retain]; 
} 

如果你想想看,沒有理由複製不可變對象,因爲那是浪費內存。另一方面,NSMutableString對象可以在它們的生命週期中看到它們的內容發生了變化,所以如果你請求一個NSMutableString的副本,你會得到一個真正的副本,一個不同的對象。

如果您的字符串不是NSMutableStrings,則保留或複製它們並不重要。但是,如果稍後重構代碼以使用NSMutableStrings,則選擇正確的方法非常重要。一個共同的邏輯應該爲你回答以下問題:如果我得到一個內容可能在外面改變的對象,我需要哪個值?更多的時候你會想要複製一份。

+0

謝謝您的澄清!我不知道'[NSString copy]'會保留。 – MrMage 2010-02-19 10:14:00