weak原理
2021-02-17 本文已影响0人
星空WU
weak表其实是一个哈希表,key是所指对象的指针,value是weak指针的地址数组。(value是数组的原因是:因为一个对象可能被多个弱引用指针指向)
Runtime维护了一张weak表,用来存储某个对象的所有的weak指针。
weak原理实现过程三步骤
1)初始化开始时,会调用objc_initWeak函数,初始化新的weak指针指向对象的地址
2) 紧接着,objc_initWeak函数里面会调用objc_storeWeak() 函数,objc_storeWeak() 函数的作用是用来更新指针的指向,创建弱引用表
3) 在最后会调用clearDeallocating函数。而clearDeallocating函数首先根据对象的地址获取weak指针地址的数组,然后紧接着遍历这个数组,将其中的数组开始置为nil,把这个entry从weak表中删除,最后一步清理对象的记录。