2010-07-18 102 views
0

伊娃如果我有一個類釋放與複製屬性

@interface Foo { 
    NSString *temp; 
} 

@property(nonatomic, copy) NSString *temp; 

@end 

據我所知,在分配時,舊的臨時將得到釋放,新的人會使用temp = [newTemp copy]進行分配。根據內存管理規則,你應該在Foo的dealloc方法中執行[temp release],對吧?

我不明白的是如果setter從未使用過會發生什麼 - 你仍然在dealloc中有[temp release],所以它釋放了一些保留計數爲0的東西。有人能爲我澄清這一點嗎?

回答

3

有兩種可能性。

  1. 由於您從未設置過,所以它是nil。發送releasenil就好了。所以沒有問題。

  2. 您的init例程爲temp設置了默認值。然後它是一個真正的對象,併發送它release也是好的。

周圍沒有問題!在任何情況下,您都不會發送消息給保留計數爲0的對象。

+0

嗯,這是有道理的。謝謝你這麼快回復! – Paul 2010-07-18 04:22:16