美文网首页
dealloc的调用流程

dealloc的调用流程

作者: Mr_wick | 来源:发表于2021-05-17 18:21 被阅读0次

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

    相关文章

      网友评论

          本文标题:dealloc的调用流程

          本文链接:https://www.haomeiwen.com/subject/ofajjltx.html