目的
平时开发 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😅