dealloc的调用流程
2021-05-17 本文已影响0人
Mr_wick
1、调用_objc_rootDealloc()
2、调用rootDealloc()
3、判断是否被释放,依据如下情况:
a、NONPointer_ISA
b、weakly_reference
c、has_assoc
d、has_cxx_dtor
e、has_sidetable_rc
如果 无以上情况:直接free()。如果有:则调object_dispose()
方法
object_dispose()
调用流程如下:
1、调用objc_instructInstance()
2、free()
objc_instructInstance()
调用流程如下:
1、判断hasCxxDtor,如果有c++内容,则调用object_cxxDestruct()
销毁C++内容
2、判断hasAssociatedObjects,如果有,则调用object_remove_associations()
销毁关联对象
3、clearDeallocating()
4、结束
clearDeallocating()
调用流程如下:
1、sideTable_clearDeallocating()
2、weak_clear_no_lock
将弱指针置nil
3、table.refcnts.eraser()
从引用计数表擦除该对象的引用计数
4、结束