美文网首页
iOS循环引用/内存泄漏检测工具

iOS循环引用/内存泄漏检测工具

作者: Sunxxxxx丶 | 来源:发表于2017-08-24 20:19 被阅读175次

    Update Log:
    2017.8.24: 初版

    2017.10.8: 添加无法使用的解决办法

    升了xcode9使用这个工具的时候发现不显示了.原来需要打开Zombie Objects.打开路径为 Edit Scheme -> Diagnostics -> 勾选Zombie Objects

    一.循环引用检查工具

    当你进入一个vc.然后退出的时候.发现他没走dealloc方法.

    然后把这个vc里的代码从头到尾检查了一遍.找到了一个循环引用的bug,

    修复后,满心欢喜的运行.

    进入vc再退出发现还是没走dealloc.

    不知道你的内心如何.反正我的内心是毫无波澜只有一句***.

    现在有个很好的工具可以直接显示是谁强引用了这个vc.不需要你从头到尾一行行找.

    二.工具使用方法

    这个是xcode自带工具.不过只能在模拟器下使用.

    1.首先进入你觉得可能没有被正常释放的vc.然后退出.

    2.点击调试工具栏里的Debug Memory Graph工具.如图.

    3.搜索你觉得可能没被释放的VC的类名

    进入Debug Memory Graph工具后.
    在左侧搜索栏搜索你觉得可能没被释放的VC的类名.
    在图中2处就可以找到该类(如果他确实没被释放就一定能找到他)

    还可以查看类后面的数字(即该类现在在内存里存在的实例数量).
    如果数量过多也可能内存泄漏了.可以检查一下这个类存在这么多实例正不正常.

    4.在右侧观看谁强引用了该vc.导致他没被释放.

    这里很明显该VC被block强引用了.
    该block是被VideoApi持有的.

    5.定位代码

    在该vc类文件里搜索VideoApi关键字.
    发现在api的回调block里使用了 _page.
    没有使用weakself调用. (应该使用self->_page)
    导致了内存泄漏.

    6.恩.大吉大利.晚上吃鸡!

    相关文章

      网友评论

          本文标题:iOS循环引用/内存泄漏检测工具

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