根據您是否使用ARC,有兩種完全不同的答案。由於ARC環境非常簡單,我只能從ARC前的角度回答。要理解的主要是所有圍繞屬性的討論保留語義只是從主要點分心:如果你擁有所有權,你必須放棄它。放棄所有權通過-release
完成。所以,你需要了解的是「什麼纔算佔有?」
按照慣例,只要您向包含[new
,alloc
,retain
,copy
]中的任何一個的類發送消息,您現在就擁有該對象。編譯器根據您指定的所有權策略爲Objective C Properties生成setter方法。所以,現在
- (void)setMyArray:(NSMutableArray *)myArray
{
// This is oversimplified, just to illustrate the important point.
// Again, this is NOT the way a setter would actually be synthesized.
[_myArray release];
_myArray = [myArray retain];
}
,當你這樣說self.myArray = someArray
,你知道你發送一個retain消息:例如...
@property (..., retain) NSMutableArray *myArray;
@synthesize myArray = _myArray;
這會生成看起來像這樣的方法到someArray
,你有責任在稍後發佈它。做到這一點的理想方法是說self.myArray = nil
,因爲它在保留nil
之前釋放舊值。請注意,發送該消息也是絕對安全的,即使您從未對myArray
屬性設置任何內容,因爲發送消息到nil
也沒問題。這就是爲什麼當你完成它們時,總是設置擁有的屬性到nil
,無論它們如何被使用。
對於研究如何存取應該實際工作,看this article。
ARC or not ????? –