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.恩.大吉大利.晚上吃鸡!
网友评论