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