我在這裏看到了一些關於使用保留或複製字符串的問題。我仍然無法理解差異或重要性。NSString保留副本問題
在我的情況下,目前我有一個類的整個負載nsstrings來保存字符串。
我希望這個類只能實例化一次,我希望它的nsstring變量根據在表視圖中單擊的索引進行更改。
如果我選擇使用保留,我的nsstrings將被覆蓋每次我在我的tableview點擊設置它們的值,如果我選擇複製,我會以某種方式有每個字符串2個實例.. ..?
對不起.....我完全不明白這一點
我在這裏看到了一些關於使用保留或複製字符串的問題。我仍然無法理解差異或重要性。NSString保留副本問題
在我的情況下,目前我有一個類的整個負載nsstrings來保存字符串。
我希望這個類只能實例化一次,我希望它的nsstring變量根據在表視圖中單擊的索引進行更改。
如果我選擇使用保留,我的nsstrings將被覆蓋每次我在我的tableview點擊設置它們的值,如果我選擇複製,我會以某種方式有每個字符串2個實例.. ..?
對不起.....我完全不明白這一點
這是一個有關複製可變對象與一成不變的人的問題。由於NSString對象是不可變的(你不能改變它們的內容),它們實現-copy這樣的:
- (id) copyWithZone: (NSZone *) zone
{
return [self retain];
}
如果你想想看,沒有理由複製不可變對象,因爲那是浪費內存。另一方面,NSMutableString對象可以在它們的生命週期中看到它們的內容發生了變化,所以如果你請求一個NSMutableString的副本,你會得到一個真正的副本,一個不同的對象。
如果您的字符串不是NSMutableStrings,則保留或複製它們並不重要。但是,如果稍後重構代碼以使用NSMutableStrings,則選擇正確的方法非常重要。一個共同的邏輯應該爲你回答以下問題:如果我得到一個內容可能在外面改變的對象,我需要哪個值?更多的時候你會想要複製一份。
謝謝您的澄清!我不知道'[NSString copy]'會保留。 – MrMage 2010-02-19 10:14:00