iOS 自动化定位内存泄露

调研:

一、FBRetainCycleDetector

https://github.com/facebook/FBRetainCycleDetector

特性:

使用这个工具可以传入应用内存里的任意一个Objective-C对象,FBRetainCycleDetector会查找以该对象为根节点的强引用树中有没有循环引用。

二、MLeaksFinder

https://github.com/Tencent/MLeaksFinder

特性:

MLeaksFinder使用起来非常简单,只需要把它引入到你的项目里,一句额外的代码都不用加,只要应用跑起来了,它就会自动帮你检测有没有内存泄露。

MLeaksFinder的代码没有侵入性,这意味着你不用为了引入它而修改你原有的项目代码,甚至连发正式版都不用移除掉,因为它只在debug版本里起作用。

自动检测并弹框提醒,无需打开额外的检测工具,代码没有侵入性,无需一个个场景去重复操作,这就是MLeaksFinder的魅力所在。它默认只检测应用里UIViewController和UIView对象的泄露情况,因为一般应用里内存泄露影响最严重的就是这两种内存占用比较高的对象,它也可以在代码里设置扩展以检测其他类型的对象泄露情况。

如下面是被检测出有内存泄露时系统控制台输出的信息,同时应用内也会弹出对话框提示已有内存泄露发生。如下提示表示当前栈从上往下看,最后一个对象也就是MyTableViewCell的对象没被释放,在它之上的三个其他对象已经成功被释放了。

原理:

一般情况下,当一个UIViewController被pop或者dismiss掉后,它的view和view的subview等也会很快地被释放掉,除非我们把它设置为单例或者还有强引用指向它。MLeaksFinder的做法就是根据这种基本情况,在一个UIViewController被pop或者dismiss掉3秒后,看看它的view和view的subview等是否还存在,如果还存在,就意味着有可能有内存泄露发生,弹框提醒用户。

所以查找内存泄露现在一般是两个工具一起用,先用MLeaksFinder找出泄露的对象,然后再用FBRetainCycleDetector检测该对象有没有循环引用,如果有,根据找出来的循环引用链条去查看修改代码就方便很多了。

如何使用:

一、iOS 内存泄露检测工具MLeaksFinder和FBRetainCycleDetector

https://blog.csdn.net/JY_Sharer/article/details/79843781

二、结合UI自动化测试,检测内存泄露

暂无实践

三、

Tags:none
上一篇
下一篇

添加新评论