目的
平时开发 iOS 应用时,有时候一不留神就可能在 UIViewController 中留下循环引用,所以我写了一个叫 WCRetainCycleChecker 的工具,专门用来简单快捷的检查 UIViewController 中的内存泄漏
原理
WCRetainCycleChecker 的原理如下:
- Method Swizzling
UIViewController.viewDidDisappear
- 在
UIViewController.viewDidDisappear
执行后,再经过 4 秒,检查该 UIViewController 是否为空,若不为空,是否属于有用的 UIViewController - 若该 UIViewController 不为空,且无用,则认为该 UIViewController 可能因循环引用而滞留在内存中,进行警告
使用
集成
|
|
注意,在这里使用
:configurations => ['Debug']
是告诉 cocoapods 不要在 Release 版本中集成 WCRetainCycleChecker,以去除生产环境中无用的代码。
执行 pod install
后,WCRetainCycleChecker 会在你的项目中自动生效,无需额外配置。
方法调用
WCRetainCycleChecker.setCheckDelay
设定检查延时WCRetainCycleChecker.shouldDefaultWarning
是否显示默认警告信息WCRetainCycleChecker.retainCycleFound
发现可能的循环引用时执行的回调,结合 FBRetainCycleDetector 使用更佳
demo:
|
|
杂谈
刚刚把这个公开出来,就有朋友告知存在一个更为强大的 repo:MLeaksFinder😅