weak 可以用于delegate
weak底层是hashmap
key是对象的地址
value是weak指针的数组(因为可能有多个weak指针指向这个对象)
初始化的时候, runtime会调用objc_initWeak函数,
initweak函数会初始化一个新的weak指针指向对象的地址
添加引用的时候, 会调用storeweak函数, storeweak的作用是更新指针指向
创建对应的弱引用表
释放时, 调用clearDealocating函数, 会根据对象地址获取所有weak指针地
址的数组, 然后遍历这个数组把其中的数据设为nil, 最后把这个entry从weak
表中删除, 最后清理对象的记录
网友评论