OC笔记 - weak底层原理


weak底层原理

1 - 我们知道 weak是弱指针,在对象销毁时自动置 nil,那么其底层原理是如何实现 ?

2 - 当一个对象需要释放时,系统就会自动调用 dealloc方法。在这里我们给出调用轨迹

① dealloc

② _objc_rootDealloc

③ rootDealloc

④ object_dispose

⑤ objc_destructInstance、free

3 - 接下来,我们一步步进行分析

① 首先是 dealloc

② 进入 rootDealloc,如果该对象就是个普通指针,又没有关联对象、又没有弱引用....直接释放,这没什么可讲的;关键是看 else里的内容

回顾一下 isa

③ object_dispose:如果是对象,那么释放前先会 objc_destructInstance

④ objc_destructInstance:清除成员变量、指针置 nil

 

 我们可大致了解下 clearDeallocating是如何工作的:不管指针是否被优化过,最终的处理都是清空了散列表中的弱引用

结语

弱引用存放在散列表 SideTable中,在弱引用对象销毁时是清空了散列表中的弱引用并给对象置 nil