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;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容