Dealloc的原理

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(),从引用计数表中移除该对象的引用计数
  • 执行完毕

你可能感兴趣的:(Dealloc的原理)