简单的检测循环引用导致的内存泄漏

循环引用导致的内存泄漏问题是 iOS 开发者最经常碰到的性能问题之一,通常我们可以使用苹果官方的性能检测工具 Instruments - Leaks帮助我们排查和定位。

最原始的方式可能是在 VCdealloc方法中输出打印页面已经被释放的日志。

deinit {
    print("deinit \(self)")
}

社区中也有开发者提供了便利的第三方工具,如微信读书出品的较为广为人知的 MLeaksFinder,通过在 VC 被 pop 或 dismiss 时检测其自身及其子视图是否正确释放来实现,再比如 PLeakSniffer 在 VC 释放后利用心跳机制来推测子视图是否被正常释放。

这里介绍一个简单使用符号断点的方式来辅助检测 VC 是否被释放。这个方式无侵入性,也不需要编写任何代码,但局限性在于只能在跑工程的使用。

  1. 找到 Breakpoint Navigator 。(Menu View > Navigators > Show Breakpoint Navigator or ⌘ - command + 8)
Breakpoint Navigator
  1. 点击+号,选择符号断点Symbolic Breakpoint...,或者选择Menu Debug > Breakpoints > Create Symbolic Breakpoint...
New Symbolic Breakpoint
  1. 设置Symbol-[UIViewController dealloc]
Symbol
  1. 点击Add Action按钮,设置一个Sound Action,声音可以自由选择
Sound
  1. 点击Sound 后面 + 增加另外一个Action,设置ActionLog Message,设置在控制器释放后打印一条日志信息,这里设置--- dealloc @(id)[$arg1 description]@
Log Message
  1. 勾选Automatically continue after evaluating actions,在控制器释放后,允许程序不中断继续执行。
Automatically continue
  1. 通过这个断点,在控制器dismisses 或者 pops时会播放一段声音,并打一段日志。
Symbolic Breakpoint

参考 Easy way to detect a retain cycle in a view controller

你可能感兴趣的:(简单的检测循环引用导致的内存泄漏)