2011-08-28 113 views

回答

3

請注意你的標準事情,讓你回到保留的對象,方法與分配,複製或新的。當您將這些與您的財產一起調用時,您可能會無意中造成泄漏。

在你的界面,你有

@property (nonatomic, retain) NSArray *someArray; 

而在你執行你有

@synthesize someArray; 

再後來你所使用的財產

self.someArray = [[NSArray alloc] init]; 

你的對象現在有一個保留從使用self.someArray = 1和從alloc中的一個計數爲2。 self.someArray =調用你的setter,它和 - (void)setSomeArray相同:(NSArray)someArray;這是用合成爲你創造的。由於您在@property聲明中使用了retain關鍵字,這將包含一個保留。

我傾向於避免這兩種方式之一。

要麼使用自動釋放初始化器

self.someArray = [NSArray array]; 

self.someArray = [[[NSArray alloc] init] autorelease]; 

,或者使用一個臨時變量

NSArray tempArray = [[NSArray alloc] init]; 
self.someArray = tempArray; 
[tempArray release]; 

所有這些方法你會留下你的self.someArray對象保留數爲1,您可以在dealloc中處理。

- (void)dealloc { 
[someArray release]; 
[super dealloc]; 
} 
0

有一件事幫了我很多忙,就是用保留類型檢查頭文件的屬性定義,然後確保在-dealloc方法中有每個版本的發行版。

對於在對象生命週期中對屬性的各種賦值,自動合成的設置者應該照顧它。