2011-08-17 65 views

回答

16

你從來沒有直接發送dealloc的消息。取而代之的是,對象的dealloc方法是通過釋放NSObject的協議方法調用間接(如果該釋放消息中接收器的保留計數成爲0的結果)。見內存管理編程指南在使用這些方法的詳細信息。

子類必須實現自己的dealloc的版本允許通過重新分配的對象所擁有的用於數據動態分配存儲或對象,例如對象的實例變量消耗任何額外的內存釋放。執行類特定的釋放後,子類方法應該通過一個消息包含的dealloc的超版本的超:

重要提示:請注意,當一個應用程序終止,對象可能不會因爲進程的內存發送的dealloc 消息在退出時自動清除 - 這是更高效的 只是爲了允許操作系統清理資源,而不是調用所有內存管理方法。對於這樣那樣的原因,你不應該在 的dealloc

- (void)release 
{ 
    _retainCount--; 
    if (_retainCount == 0) { 
     [self dealloc]; 
    } 
    } 
1

運行時會爲你做的,當對象不再需要(其運行時決定爲好)。只要確保您保留並正確釋放。不要在其他對象上調用dealloc。

2

dealloc管理稀缺資源被稱爲的memory management結果。一旦對象「retainCount」達到0,則dealloc消息會自動發送到該對象。

你應該調用的dealloc在對象上,除非它是在重寫的dealloc年底[super dealloc];通話。

-(void)dealloc 
{ 
    [ivar release]; //Release any retained variables before super dealloc 

    [super dealloc]; //Only place in your code you should ever call dealloc 
} 

而且根據-[NSObject dealloc] discussion

你從來沒有直接發送dealloc的消息。取而代之的是,對象的 dealloc方法是通過釋放NSObject的 協議方法調用的間接(如果在接收機的 所述釋放消息的結果保留計數成爲0)。有關使用這些方法的更多詳情,請參閱Memory Management Programming Guide的 。

5

試想一下,-release在NSObject的實現是這樣的:

- (void)release 
{ 
    _retainCount--; 
    if (_retainCount == 0) { 
     [self dealloc] 
    } 
} 

我敢肯定它比這更復雜一些,但回答你的問題是,對象本身將調用-dealloc時其保留計數降至零。但是,您的自定義類將從NSObject繼承此行爲。你永遠不需要在你編寫的代碼中調用-dealloc;當對象被正確釋放時,它總會自動發生。

+0

我希望這個方法體應該是在「釋放」,而不是「保留」 – Saran 2011-08-17 13:23:43

相關問題