weak的基本使用
weak是弱引用,当一个对象被weak修饰的时候,这个对象的引用计数并不会增加,且这个对象被释放的时候weak会将指针自动置为nil。weak还可以解决循环引用的问题
weak的原理
runtime维护了一张weak表,用于存放对象的weak指针地址数组,这张weak表也就是哈希表,weak指针指向的对象地址作为key值,value是weak指针地址数组
初始化的时候:runtime会调用initweak函数 然后初始化一个weak指针地址,
添加引用的时候:runtime会点用storeweak函数 然后更新这个weak指针地址并创建一张weak表
移除的时候:runtime会调用clearDealocating函数 然后会根据对象的地址找到这个对象的weak指针数组 然后遍历这个数组将数据置为nil,最后从weak表中移除这个记录
网友评论