iOS中dealloc实现机制

一、dealloc调用流程
  • 1、首先调用_objc_rootDealloc()
  • 2、然后调用rootDealloc()
  • 3、判断是否可以被释放,判断依据为,是否有以下5中情况:
    (1)NONPointer_ISA
    (2)weakly_reference
    (3)has_assoc
    (4)has_cxx_dtor
    (5)has_sidetable_rc
  • 4、如果有以上5中情况中的任意一种,则调用object_dispose()方法;如果没有其中任意一种,表明可以执行释放操作,执行C函数的free()
  • 5、执行完毕。
二、object_dispose()调用流程
  • 1、调用objc_destructInstance()
  • 2、调用C函数的free()
三、objc_destructInstance()调用流程
  • 1、判断has_cxx_dtor,如果有C++相关内容,要调用objc_cxxDestruct(),销毁C++相关内容。
  • 2、判断hasAssociatatedObjects,如果有,要调用objc_remove_associations(),销毁关联对象的一系列操作。
  • 3、调用clearDeallocating()
  • 4、执行完毕。
四、clearDeallocating()调用流程
  • 1、执行sideTable_clearDeallocating()
  • 2、执行weak_clear_no_lock,在这一步骤中,会将指向该对象的弱引用指针置为nil。
  • 3、执行table.refcnts.eraser(),从引用计数表中擦除改对象的引用计数。
  • 4、至此,dealloc执行流程结束。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容