1. 程式人生 > >iOS 內存泄漏監測自動化

iOS 內存泄漏監測自動化

top clas aced memory 監測 ive leak 另一個 查看

在 Android 上,Square 這家公司提供了非常有名的工具: leakcanary ,來幫助開發者們在日常開發過程中就能夠發現內存泄漏。但在 iOS 上呢?在 Google 的時候,我發現了兩個工具,一個是這篇文章將要翻譯並介紹的 Facebook 開源的三件套,另一個則是國內微信閱讀團隊做的 MLeaksFinder 。

關於 MLeaksFinder 這裏有兩篇其官方提供的文章介紹:

  • MLeaksFinder:精準 iOS 內存泄露檢測工具
  • MLeaksFinder 新特性

簡而言之,MLeaksFinder 使用了一個非常 tricky 的方法來檢測內存泄漏:通常一個 UIViewController 在被 pop 之後將會很快被釋放,假設在 pop 3 秒鐘之後仍然沒有被釋放,則可以認為這個 UIViewController 存在泄漏的問題(其實類似的方案同樣也可以在 Android 上實現,據我所知微信在早期就有類似原理實現的用在 Android 上的內存泄漏監測工具了)。在後續的更新版本中,MLeaksFinder 也依賴了 Facebook 的 FBRetainCycleDetector 來輔助判斷內存泄漏是否是由循環引用引起的。

MLeaksFinder 的原理非常簡單但有效,幫助我排查了 App 中存在的不少內存泄漏問題,而且對於整個應用基本零侵入,不需要做任何的配置與修改。不過缺點也在這裏,因為如果要將其作為日常自動化的工具使用的話,我希望 MLeaksFinder 本身可以提供回調接口,以便在內存泄漏發生時我可以選擇是彈出 Alert 提示開發者,還是通過後臺上報的方式提交。當然,開源的好處在於可以修改源碼滿足自己的需求,後續也會向其提交 PR,完善這個非常精巧的項目。

Facebook 的工程師們其實早就已經將 iOS 的內存泄漏排查自動化了,並發布了一篇非常不錯的文章來介紹其原理,以及開源了他們的三個工具套件。為了加深對 Objective-C 內存管理的理解以及對庫的原理的了解,在文末,會有我對這全篇英文文章的翻譯。

對於工程師而言,自動化的工具真的是排名前幾的生產力。

如果不想看翻譯的話,這裏也提供一個大概的全文重點概覽:

  • 三個開源工具:
    • FBRetainCycleDetector
      • 主要用於檢測循環引用
    • FBAllocationTracker
      • 主要用於快速檢測潛在的內存泄漏對象,並提供給 FBRetainCycleDetector 進行檢測
    • FBMemoryProfiler
      • 可視化工具,直接嵌入到 App 中,可以起到在 App 中直接查看內存使用情況,並篩選潛在泄漏對象的作用
  • Facebook 的自動化:客戶端自動監測 -> 上報服務端 -> 歸類/篩選 -> 分發給指定人員 -> 處理內存泄漏
  • 未開源的部分在於服務端如何對上報的循環引用鏈進行歸類與篩選,不過 Facebook 的工程師們在文中給出了他們自己的策略

https://www.ctolib.com/topics-104295.html

iOS 內存泄漏監測自動化