Dealloc的原理
2020-05-22 本文已影响0人
MJBaby
1、Dealloc调用流程
- 首先调用_objc_rootDealloc()
- 接下来调用rootDealloc()
- 判断是否可以被释放
- NONPointer_ISA
- weakly_refrence
- has_assoc
- has_cxx_dtor
- has_sidetable_rc
- 如果有以上五种任意一种,将会调用object_dispose()
如果没有以上的情况,则可以执行释放操作,C函数的free() - 执行完毕
2、object_dispose()调用流程
- object_destructInstance()
- 调用C函数的free()
3、object_destructInstance()调用流程
- 先判断has_cxx_dtor,如果有C++的相关内容,要调用object_cxxDestruct(),销毁C++相关的内容
- 再判断hasAssocitated,如果有的话,要调用object_remove_associations(),销毁关联对象的一系列操作
- 调用clearDeallocating()
- 执行完毕
4、clearDeallocating()调用流程
- 执行sideTable_clearDeallocting()
- 执行weak_clear_no_lock,在这一步骤中,会将指向该对象的弱引用指针置为nil
- 执行table.refcnts.eraser(),从引用计数表中移除该对象的引用计数
- 执行完毕