对象的释放:
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;