在目標C中創建自定義類時,何時以及如何調用dealloc
方法?這是我必須在班上以某種方式實施的嗎?誰在調用dealloc方法以及何時在Objective C中?
回答
你從來沒有直接發送dealloc的消息。取而代之的是,對象的dealloc方法是通過釋放NSObject的協議方法調用間接(如果該釋放消息中接收器的保留計數成爲0的結果)。見內存管理編程指南在使用這些方法的詳細信息。
子類必須實現自己的dealloc的版本允許通過重新分配的對象所擁有的用於數據動態分配存儲或對象,例如對象的實例變量消耗任何額外的內存釋放。執行類特定的釋放後,子類方法應該通過一個消息包含的dealloc的超版本的超:
重要提示:請注意,當一個應用程序終止,對象可能不會因爲進程的內存發送的dealloc 消息在退出時自動清除 - 這是更高效的 只是爲了允許操作系統清理資源,而不是調用所有內存管理方法。對於這樣那樣的原因,你不應該在 的dealloc
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc];
}
}
運行時會爲你做的,當對象不再需要(其運行時決定爲好)。只要確保您保留並正確釋放。不要在其他對象上調用dealloc。
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的 。
試想一下,-release
在NSObject的實現是這樣的:
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc]
}
}
我敢肯定它比這更復雜一些,但回答你的問題是,對象本身將調用-dealloc
時其保留計數降至零。但是,您的自定義類將從NSObject繼承此行爲。你永遠不需要在你編寫的代碼中調用-dealloc;當對象被正確釋放時,它總會自動發生。
- 1. 何時調用dealloc方法?
- 2. 在Objective C中的init和dealloc方法中調用Accessor方法不安全嗎?
- 3. 誰調用類初始化方法<clinit>以及何時?
- 4. 如何在Objective-C中調用方法?
- 5. 如何在objective-c中調用方法?
- 6. 如何調用C++方法在Objective-C
- 7. 當一個對象可以在Objective-C的dealloc方法中釋放時?
- 8. 在C#中,如何限制誰可以在編譯時調用方法
- 9. 在Objective C中的dealloc中使用setter?
- 10. 什麼時候調用MvcHandler.ProcessRequest方法以及由誰?
- 11. 自殺:Objective-C對象自己調用自己的-dealloc方法
- 12. 是否有必要在Objective-C類中添加dealloc方法?
- 13. RAD XE2 DataSnap - 調用方法在iOS Objective-C中調用方法
- 14. 誰在調用run()方法
- 15. 如何在BackBonejs方法中調用Objective-c方法
- 16. Objective-C在dealloc中保留計數
- 17. 何處放置Objective-C dealloc?
- 18. 可以在Objective-C中Uncrustify縮進多行方法調用嗎?
- 19. DOM更改時調用Objective C方法。
- 20. 過早調用Dealloc方法
- 21. 如何在javascript中調用Objective-C方法在ios版本
- 22. 調用Objective-C方法
- 23. Dealloc在方法仍在運行時調用
- 24. 在presentModalViewController中調用dealloc方法時關閉控制器
- 25. objective-c:一個.m文件中的多個類定義,以及調用方法
- 26. 正在調用應用程序仍在運行時調用UITableViewDelegate dealloc方法
- 27. Objective-C從類方法調用方法
- 28. 在Objective-C中調用(id)來調用任意方法
- 29. 當的dealloc被稱爲在Objective-C
- 30. 如何從JavaScript調用Objective-C方法?
我希望這個方法體應該是在「釋放」,而不是「保留」 – Saran 2011-08-17 13:23:43