QYHRetainCycleDetector
ObjectiveC 保留周期检测器
简介
通过 hook objc_retain
和 objc_release
等方法,将存活的 NSObject 对象添加进对象池,然后定时检测对象池中的对象是否存在循环引用。
检测循环引用的实现借鉴了 FBRetainCycleDetector,为了避免在检测过程中再次调用 objc_retain
等方法进入死循环,主要使用 CoreFoundation 对象以及自定义结构,手动管理内存。
目前可以检测到的循环引用有 NSObject 对象 A 和 B 互相强引用、NSTimer 循环引用、Block 循环引用。
使用方式
启用
[QYHRetainCycleDetector enable];
建议将启用函数添加到以下函数中。
application:didFinishLaunchingWithOptions:
函数中。
关闭
QYHRetainCycleDetector disable];
性能
QYHRetainCycleDetector本质上是一个测试工具,尽管尽可能做了优化,但通过遍历对象引用链仍然是耗时操作,不建议在生产环境中使用。