1.精准 iOS 内存泄露检测工具:MLeaksFinder
一般来说, iOS的内存泄露检测大多是通过Instruments里面的Leaks. Leaks里面可以看到某各类有多少个实例, 还会指出一些循环引用的图示和泄露点. 虽然看起来很美好, 但是每次实际使用的时候, 多多少少会出现一些问题, 最让人难以忍受的就是明明泄露了但是没有报警.
为了解决这个问题, 在这里介绍一个MLeaksFinder的开源库, 这个库是代码级别的检测view和viewController是否出现内存泄露的情况. 它的优势是只要引入后不侵入现有代码, 正常跑一遍APP, 如果出现泄露, 将会触发断言打印相关日志提醒我们出现了泄露. 缺点也比较明显了, 就是只能检测view和viewController级别的泄露. 不过一般来说也足够用了, 毕竟这是大头.
使用方法:
只要引入文件到工程中即可,不需要导入任何头文件就可以进行检测,这里应该用到了hook,将系统的方法hook掉进行检测。
你只要正常运行你的爱啪啪,它就可以自动检测可能存在的内存泄漏,并触发断言。如下图:
然后你只要检查一下代码,把那个实例释放掉就OK了,如果没有释放成功,运行的时候还会继续触发断言,这种蛋疼的情况只能慢慢找了。
如果你的某个类是单例或者不需要释放,可以在类中添加如下方法:
-(BOOL)willDealloc{ return NO; }
这样MLeakFinder就不会触发断言了。
Github地址:https://github.com/Zepo/MLeaksFinder