iOS学习笔记【七】——引用计数管理
只做简单笔记📝 详细请戳标题链接🔗
key point:为了管理所有对象的引用计数和weak指针,苹果创建了一个全局的SideTables
SideTables
- 一个全局的Hash表,存放SideTable结构体,使用对象的内存地址作为key进行hash映射
- 使用分离锁来保证整个hash表的安全性和操作效率,每一个元素(SideTable)都带有一把锁,降低锁的粒度,并发操作
SideTable
自旋锁
在操作引用计数的时候对SideTable加锁,避免数据错误。适用于锁使用者保持锁时间比较短的情况,自旋锁不会引起调用者睡眠,不需要进行上下文切换,减少时间开销。
引用计数器 RefcountMap
存放对象具体引用计数数量的map,同一个SideTable中可能存储多个对象管理,解决hash冲突
value具体结构
- 最低位WEAKLY_REFERENCED:表示是否有弱引用指向这个对象,如果有的话在对象释放的时候需要把所有指向它的弱引用都变成nil,避免野指针错误
- 次低位DEALLOC