MLeaksFinder 介紹與使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM