当一个对象被weak指针指向时,这个weak指针会以对象作为key,存储到SideTable的weak_table
哈希表中。
- Key:对象
- Value:weak指针数组
当该对象dealloc方法被调用时,Runtime会以该对象为key,从SideTable的weak_table
哈希表中,找到对应的weak指针列表,然后吧其中的weak指针逐个置为nil。
底层细节
使用weak修饰的对象,底层调用了objc_initWeak
函数。里面获取weak指针地址和对象地址传递到下一层函数存储。最终存储到SideTable中的weak_table
哈希表。
1 | struct SideTable { |