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、结束

上一篇下一篇

猜你喜欢

热点阅读