iOS笔记 - retainCount源码解析


引用计数源码解析

1 - 64bit 下的引用计数存放在 isa 中

2 - 打开源码:查看引用计数的具体实现

① 打开 SideTable 可以看到引用计数的缩写 refcnts 是一个存放对象引用计数的散列表

② 接下来走一遍底层函数 rootRetainCount

③ 打开 sidetable_getExtraRC_nolock 可以看到返回的引用计数

结论:在 64bit 中引用计数可以直接存储在优化过的 isa 指针中的 extra_rc;也可能存在 has_sidetable_rc 中,通过一系列操作对散列表中的引用计数实现+1/-1