iOS中dealloc实现机制
2024-04-03 02:34:41 来源:
金风故事网
一、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_clearDeallo(中文邮件格式:邮件的主题是为了让收件人看到邮件之后对该邮件有个大体了解,确定邮件的紧急、重要程度、有效、有用性的;所以在写主题的时候最主要的突出 什么事、重要程度等关键信息;可以按照以下方式和思路去写:格式:修饰词+邮件内容+时间+发件人。如果有必要的话还可以在主题上加上紧急程度和邮件的主体内容,清晰明了。)cating()
。2、执行weak_clear_no_lock
,在这一步骤中,会将指向该对象的弱引用指针置为nil。3、执行table.refcnts.eraser()
,从引用计数表中擦除改对象的引用计数。4、至此,dealloc执行流程结束。