Weak 的内部实现原理
参考答案:
Weak的内部实现原理主要基于哈希表和运行时(Runtime)的维护。具体来说,Weak的实现原理可以分为以下三个步骤:
- 初始化:在初始化时,Runtime会调用objc_initWeak()函数,用于初始化一个新的weak指针,使其指向对象的地址。
- 添加引用:在添加引用时,objc_initWeak()函数会进一步调用objc_storeWeak()函数。这个函数的作用是更新指针的指向,并创建对应的弱引用表。弱引用表实际上是一个哈希表,其中的key是所指对象的指针(即对象的地址),而value则是weak指针的地址数组(因为一个对象可能被多个弱引用指针指向)。
- 释放:当对象被释放时,会调用clearDeallocating()函数。该函数首先根据对象的地址(即哈希表的key)找到对应的value(即存放weak指针的数组),然后遍历这个数组,将其中的每个weak指针置为nil,表示这些weak指针不再指向任何有效的对象。最后,将该entry从weak表中删除,并清理对象的记录。
通过这种方式,Weak机制可以确保当对象被释放时,所有指向该对象的weak指针都会被自动置为nil,从而避免野指针的问题。这种机制在Objective-C的内存管理中扮演着重要的角色,有助于减少内存泄漏和提高程序的稳定性。