众所周知,内存泄漏是个潜在风险。
它会让用户感到应用卡顿,体验差;让程序运行时占用越来越多的内存,内存不足时就会导致崩溃,影响正常使用。而且这种崩溃 问题我们还十分难定位。
这是非常让人头疼的问题,几十万行的代码中我们不知道那句泄露的。
针对以上问题,为了项目更好更稳定的发展,所以我们在这次技改时,决定对项目里的内存泄漏问题进行修复处理。
我们都知道 xcode 提供了内存泄露工具 Instruments 但是非常繁琐 而且不清晰,最主要的是Abandoned memory不会被检测出来。
于是就引进了MLeaksFinder 。
这是一个 iOS 平台的自动内存泄漏检测工具,一款简单方便不入侵项目逻辑不用写任何代码的一款对ViewController,View 的内存泄露检测的一款轻量级工具,可以在日常的开发和测试中,自动地发现并警告内存泄漏。有内存泄漏的地方,它会以弹框形式展现出来。
提示框出现步骤:打开一个界面,在返回关闭此界面3秒后,只要这个界面存在内存泄漏,就会弹出一个提示框,显示哪里内存泄漏的提示。如图:
而且控制台也会打印:
2018-07-04 18:19:55.667928+0800 Micropulse[39310:1085281] Memory Leak: (
UIImagePickerController
)
2018-07-04 18:19:55.668110+0800 Micropulse[39310:1085281] Possibly Memory Leak.
In case that UIImagePickerController should not be dealloced, override -willDealloc in UIImagePickerController by returning NO.
View-ViewController stack: (
UIImagePickerController
)
2018-07-04 18:19:59.534047+0800 Micropulse[39310:1085281] Object Deallocated: (
UIImagePickerController
)
复制代码
意思是我们的 UIImagePickerController 没有被释放, 解决掉这些内存泄露就好,提示就会没有的。
这就使得我们能根据提示能快速意识到问题,定位问题进行修改,而且只要解决好了,再重复上述步骤,就不会再次出现,方面快捷。这种及时的内存泄漏的发现在很大的程度上降低了修复内存泄漏的成本。
而且这种弹框,只在debug时才会提示,不会影响线上正式环境!