MLeaksFinder
今天发现一个非常好用的内存泄露方案,比Instrument要好用很多,MLeaksFinder 的使用很简单,参照
https://github.com/Zepo/MLeaksFinder
,只要pod 'MLeaksFinder'就可以在运行时(debug 模式下)帮助你检测项目里的内存泄露了,无需修改任何业务逻辑代码,而且只在 debug 下开启,完全不影响你的 release 包。
当内存泄露的时候就会Alert一个窗口提示哪个view或者Controller存在内存泄露
优点:
1.使用简单,不侵入业务逻辑代码,不用打开 Instrument
2.不需要额外操作随时监控 随时提示Leak
3.精准
======================================================================
趁热打铁,测试了一下当前的项目,发现好多页面有内存泄露的现象,发现MLeaksFinder可以定位到view 或者Controller 但是只能定位到某一个控制器却不能精准的知道是哪里泄露了,所以MLeaksFinder,更适合于检查循环引用的问题,而单纯的没有release掉对象的情况还需要instrument支持。
今天在项目中发现AFHTTPSessionManager有内存泄露的现象,发现之前封装好的网络请求没有把AFHTTPSessionManager的创建写在单例里,所以导致了内存泄露。解决了这个之后发现项目中还是有泄露现象,而且显示是main函数当中,一开始无从下手,然后查了一下发现可能是循环引用导致,开始从 AppDelegate中一步一步排查没有想到更好的办法,最后发现是获取UDID保存到KeyChain中出了问题 ,因为之前是在网上找的代码直接贴上了没有仔细看所以导致了泄露现象发生。
问题:使用CF对象只retain并没有release对象