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

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处就可以找到该类(如果他确实没被释放就一定能找到他)

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

iOS循环引用/内存泄漏检测工具_第1张图片

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

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

iOS循环引用/内存泄漏检测工具_第2张图片

5.定位代码

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

iOS循环引用/内存泄漏检测工具_第3张图片

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

你可能感兴趣的:(iOS循环引用/内存泄漏检测工具)