2010-08-13 94 views
0

請仔細閱讀下面的代碼::在複製財產保留計數

AddressCard *card1 = [[AddressCard alloc] init]; 
AddressCard *card2 = [[AddressCard alloc] init]; 

[card1 setName:[NSMutableString stringWithString:@"Deepak"] andEmail:[NSMutableString stringWithString:@"[email protected]"]]; 

NSMutableString * temp = [NSMutableString stringWithString:@"Deepak"]; 
r1 = [temp retainCount]; 
r2 = [card1.name retainCount]; 

//[card2 setName:card1.name];//retain count 2 
//OR// 
[card2 setName:temp];// retain count 1 

r1 = [card2.name retainCount]; 

這是因爲在這兩種情況下輸入類型爲字符串,一些人認爲混亂。

在此先感謝。 d

+0

這是嚴重難以閱讀。你應該選擇所有的代碼,並點擊代碼示例按鈕,以便它至少得到正確的格式。 – 2010-08-13 05:57:58

+2

你的問題是什麼? – 2010-08-13 06:07:32

回答

0

作爲程序員,您不需要擔心保留計數(大部分)的確切值。您需要跟蹤哪些對象屬於他人。

在你的代碼,你在哪裏得到的保留數R1 R2 & ....

沒什麼擁有溫度,它與一個類的方法(+方法)創建的,因此將在明年自動釋放池沖洗得到釋放。

卡1擁有自己的「名字」

當你設置[card2 setName:temp];這就是當卡2擁有溫度。它不再受到在下次游泳池釋放時遭到破壞的威脅。

0

我想你似乎缺少可變和不可變對象。當你調用setName:andEmail:有什麼合理的原因,爲什麼這個方法期望可變字符串?例如,該方法是否通過插入或刪除字符來更改這些字符串的值?如果您打算更改字符串的內容,它們只需要是可變的。如果您只將字符串分配給另一個變量而不修改字符串的實際內容,那麼它們應該是不可變的NSStrings。

此外,如果您對何時保留以及何時釋放對象感到困惑,請確保您已閱讀並理解Cocoa Memory Management Programming Guide。這很可能會回答你有關什麼方法/屬性將保留對象以及何時釋放對象的問題。