美文网首页
简单的检测循环引用导致的内存泄漏

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

作者: Mariko00o | 来源:发表于2020-10-10 13:53 被阅读0次

    循环引用导致的内存泄漏问题是 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

    相关文章

      网友评论

          本文标题:简单的检测循环引用导致的内存泄漏

          本文链接:https://www.haomeiwen.com/subject/qcadpktx.html