2012-05-25 135 views
2

可能重複:
NSString @property, using copy instead of retain對於副本的NSString,我需要保留一份明確

我有如下基本的內存管理問題:

NSString *someName = [NSString stringWithFormat:@"Chris"]; 
Person *p = [[Person alloc] init]; 
p.name = someName; 

如果「名稱」設置爲「保留」,我知道「someName」將自動釋放一次並保留一次,因此「p.name」將保留一個retainCount的NSString。

但是如果將「名稱」設置爲複製,那麼該怎麼辦。雖然「someName」給自己的副本給「p.name」,但是副本是stil會自動釋放,對嗎?那麼,我需要明確保留「someName」嗎?

回答

1

不,拷貝在它返回之前不會自動釋放拷貝(或者換句話說,它會返回一個你自己擁有的對象)。如果複製屬性確實沒有價值,那麼它們就沒有價值,不是嗎?

1

無論在哪種情況下都不需要釋放someName:副本成爲獨立對象;其創建不會增加原始的引用計數。

保留會增加參考計數someName,正如您在帖子中描述的方式。