2014-03-28 64 views
1

我一直在想知道如何在類的dealloc方法中釋放實例變量。假設我有一個名爲myString的一個實例變量,在dealloc中釋放實例變量的正確方法目標C

// MyClass.h 
{ 
NSString *myString; 
} 
@property(nonatomic,retain) NSString *myString; 

// MyClass.m 
@synthesize myString; 

-(void)dealloc 
{ 
[self setMyString: nil]; 
[super dealloc]; 
} 

蘋果文檔指出Don’t Use Accessor Methods in Initializer Methods and dealloc。我發現一些輸入將實例變量設置爲零來釋放實例變量(我在上面的方法dealloc中執行)。所以,如果這是釋放實例變量的正確方法,那麼爲什麼蘋果說在dealloc方法中使用訪問器不可取?

+3

正確的方法,恕我直言,是用'ARC' – Alejandro

回答

3

您應該在對象上調用release;

-(void)dealloc { 
    [myString release], myString = nil; 
    [super dealloc]; 
} 

它與多線程有關,其中可能有一些其他線程也訪問屬性。

但是你應該更多地去ARC,那麼你不必爲你的任何對象添加dealloc,編譯器會爲你編譯時添加保留/釋放消息。

蘋果已經發布了一個很好的Transitioning to ARC Release Notes

+0

就是你所寫的與之間的區別[自setMyString:無] ;?我沒有看到任何 –

+1

他也使用過'[xyz release]'。 –

+0

@AndreyChernukha:你正在調用setter方法。在鍵值編碼方面,有一些問題在'dealloc'中做了。 – newacct

相關問題