Debug Memory Graph檢查內存泄漏

講到檢查內存泄漏,很多人的第一反應就是 Instruments 裏的 Leaks。今天來講一下Xcode 8 推出的 Debug Memory Graph

爲了能看到內存詳細信息,先打開 Edit Scheme-->Diagnostics, 勾選 Malloc ScribbleMalloc Stack。爲了避免過多的性能消耗,在 Malloc Stack 中直接選擇 Live Allocations Only 即可。

那怎麼使用呢?

  • 找到查看視圖層級的 Debug View Hierarchy 邊上的三個小圈圈的按鈕,點擊後如下圖。
  • 選擇 Show the Debug navigator, 如果有內存泄露的地方,邊上會有一個紫色的感嘆號出現。可以通過下方show only leaked blocks過濾文件。
  • 點擊後會有該行的內存詳細信息及對象之間的關聯關係。其中黑線表示強引用,而灰色的線不代表弱引用,只是一些系統級別的引用或者蘋果爲了優化顯示效果而添加的,可直接忽略。
  • 點擊右上角的 Show the Memory Inspector,會有堆棧信息,並且能直接定位到內存泄漏的代碼塊。

其實上述的功能,在Runtime Issue navigator中是類似的。

Debug Memory Graph 有好處也有壞處。

  • 好處:它能很方便的定位到內存泄漏的地方。
  • 壞處:有時它會誤報。例如 - 當創建UIButton對象並將其添加到UIToolBars項目數組時,我們已經看到它被識別爲內存泄漏,但我們不明白爲什麼。
Debug Memory Graph 有時也會捕捉一下系統的內存泄漏,如下圖,內存泄漏定位到了一個叫UIKeyboardPredictionView的地方。原因是調起系統鍵盤後,系統並沒有真正的將鍵盤迴收,下次喚起時還會再次使用,而這個時候它就會將這個識別爲內存泄漏。不過這個我們可以不用管。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章