iOS 何时在运行时检查保留计数 table

When does iOS check retain count table on runtime

我读到(来自 Kazuki Sakamoto 和 Tomohiko Furumoto 写的一本书)在运行时 iOS 维护一个 hashtable,其中对象的地址作为键,该对象的保留计数作为值。

如下所示:

key(object's addr)       value(reference count)

0x7fff59a7ba88           2

0x7fa84b4b2c10           0
...

并且 iOS 运行时会检查 table 一次,看看是否有任何值为零的键,这意味着应该释放一些对象,然后 iOS 会删除那个键- 来自 table 的值对并调用 dealloc 释放对象的内存。

如果这个理论是正确的,那么我的问题是什么时候,用什么频率系统会检查reference count hashtable?每个runloop?或者 iOS 根本不会检查 table 而只是自动完成?

更新:

我刚刚更正了我的描述,它应该与 ARC 或 MRC 无关,更多的是关于运行时的引用计数。

这种行为听起来更像是垃圾回收,而不是 ARC 的工作方式。

ARC 的行为是完全确定的:它跟踪对一个对象的 strong 引用的数量,一旦该计数达到 0,该对象将立即被释放。您可以阅读实施细节 here.