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和父控制器强引用