内存泄漏检测三方库-MLeaksFinder
2023-10-21 15:02:54发布 浏览431次 信息编号:79720
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
内存泄漏检测三方库-MLeaksFinder
iOS性能优化是一个比较复杂的问题,其中之一就是内存泄漏检测,很多人第一时间就会想到使用它。 因为学习成本比较高,而且专业详细的教程相对较少,所以学完基础介绍后就变得望而生畏。今天浏览了微信读书组的技术博客,发现了一个非常友好的内存泄漏检测库。
简单介绍一下。
官方解释:
具体方法是在基类中添加一个方法——。 这个方法的作用是,先用一个weak指针指向self,经过一小段时间(3秒),通过这个weak指针来调用-,而-main函数就是直接断言。
核心代码:
-(BOOL){ id =self;((,()(3*)),eue(),^{[ ];});;}-(void){(NO,@"");}
这样,当我们认为一个对象应该被释放时,我们在释放它之前调用这个方法。 如果3秒后释放成功,就会指向nil,并且不会调用-方法,断言也不会成功。 未发布(泄漏), - 将在调用中断言。 这样,当一个视图被弹出或者(我们认为它应该被释放)时,我们会遍历它上面的所有视图并依次调整。 如果3秒后仍未释放,则断言。
比如在分类中,用hook去掉:、:、::等方法,让它们都执行该方法。 这样就在不侵入开发代码的情况下,增加了检查内存泄漏(AOP)的功能。
安装
安装很简单,直接添加pod''即可。 您不需要在任何文件中引入头文件。 执行完pod后,直接build或者运行即可。
案件
在iOS中,一个常见的内存泄漏场景是循环引用。 作为一名iOS工程师,你应该时刻警惕循环引用引起的问题。 不过,如果你赶工或者稍有不慎,仍然会出现一些有问题的代码。
对于Xcode,编译器会提示编写的代码中有明显的循环引用。 例如,如果 self 在 self 持有的块中使用,Xcode 将显示警告。 但是,对于以下代码,Xcode不会发出警告:
*cell=[ :];if(!cell){cell=[[ alloc]: :];}cell.model=model;[cell :^{if(self.){self.(model);}}] ;;
中的某个单元格持有一个块,并使用 self。 在街区里。 乍一看,似乎没有什么问题。
真的没有问题吗?
这个控制器弹出后,立刻弹出了一个弹窗。
.PNG
单击循环
.PNG
仔细想想,确实存在循环引用。 首先,self指的是cell,cell中的block指的是self。 这样,在控制器弹出后,视图仍然具有强引用,从而导致其内存无法释放,这就形成了循环。 参考一下,在经历频繁的push和pop操作后,内存会急剧增加。 其实这是一个非常低级的bug,但是如果你不注意的话,它就会被忽略。
既然问题被发现了,那么解决循环引用就很简单了。 在单元格块之外,将 self 定义为弱类型以打破循环引用:
······(self)=self;······//只需替换block [cell :^{if(.){.(model);}}];中的self即可
至此,简单的使用就已经介绍完了。 确实很容易发现一些潜在的问题。 它对项目的侵入几乎为零。 强烈推荐使用它。
提醒:请联系我时一定说明是从星空网上看到的!