Dealloc

對象的釋放:

NSObject調用dealloc后調用順序:dealloc --> objc_rootDealloc -->objc_dispose -->objc_destructInstance

重點關注objc_destructInstance函數,里面做了三件事情:

1.object_cxxDestruct :釋放變量

object_cxxDestruct最終會調用emitCXXDestructMethod,這個函數遍歷當前對象的所有實例變量,并調用objc_storeStrong函數,objc_storeStrong里會將變量release掉;ARC下[super dealloc]方法也由編譯器自動插入

2._object_remove_assocations:移除對象的關聯對象

關聯對象是由AssociationsManager來管理,存儲在AssociationsHashMap類型的全局表中。在對象dealloc后,會調用_object_remove_assocations遍歷對象對應的HashMap全局表,然后釋放掉;

3.objc_clear_deallocating:清空引用計數表和弱引用表,并將所有的weak引用置為nil;

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容