講到檢查內存泄漏,很多人的第一反應就是 Instruments
裏的 Leaks
。今天來講一下Xcode 8
推出的 Debug Memory Graph
。
爲了能看到內存詳細信息,先打開 Edit Scheme-->Diagnostics
, 勾選 Malloc Scribble
和 Malloc 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
項目數組時,我們已經看到它被識別爲內存泄漏,但我們不明白爲什麼。