首页 > 技术文章 > MLeaksFinder 介绍与使用

gumengli 2018-02-28 09:22 原文

1、官方文档介绍以及github链接

http://wereadteam.github.io/2016/02/22/MLeaksFinder/

https://github.com/Zepo/MLeaksFinder

2、根据官方文档说明,MLeaksFinder可以在运行时(debug 模式下)帮助你检测项目里的内存泄露了,

无需修改任何业务逻辑代码,而且只在 debug 下开启,完全不影响你的 release 包。

 

 

  • MLeaks介绍

 

能够自动检测UIView以及UIViewController的内存泄露,使用断言的方式,能够打印出产生内存泄露的view-viewcontroller栈。如下所示:

从上往下,在MyTableViewController下面的表格视图的MyTableViewCell有内存泄露,上面已经显示的控制器和视图是没有内存泄露的。

MLeaksFinder的引入完全不侵入原有的代码,如果使用CocoaPods管理代码,可以在podfile中加入即可。

pod ‘MLeaksFinder’

 

  • 常见内存泄露示例

1、block中使用self,会造成循环引用

使用__weak __strong解决,或者使用宏定义wekify和strongify

2、ACHRInvitationCreditVC邀请授信中,在cell的block中引用了类扩展中的实例变量。

解决方法:

1)使用@weakify 和@strongify, 调用方式使用self->isAddrchStr

2)使用@weakify 和@strongify,将isAddrchStr定义为类扩展属性,使用self.isAddrchStr调用 

 

3、在block中使用属性自动生成的实例变量,如_name,会造成循环引用。属性的设置方法尽量使用self.name = someString;的形式。如ACHRDateT中使用的时间选择界面

4、对于使用UITabVC的子控制器,其引用的父控制器不能使用strong,应该使用assign,也可以在指定父控制器的时候使用weak属性。

使用weakSelf

 

5、ACHRWaitSubmitV中有一个内存泄露,一直没有找出来,貌似已经排除了上面的block和父控制器强引用

 

推荐阅读