???記住 Memory Graph 的核心作用:
可視化 對象間的引用關(guān)系
快速發(fā)現(xiàn) 循環(huán)引用
無需停止應(yīng)用 實(shí)時(shí)查看
?? 總結(jié):如何“看懂”Memory Graph 找泄漏?
步驟 1:看對象數(shù)量
每個類的數(shù)量(如LeakingViewController (6)、LeakyClass (12)):若數(shù)量遠(yuǎn)大于預(yù)期(比如視圖控制器只應(yīng) 1 個,類實(shí)例只應(yīng) 1 個),則高度可疑。
實(shí)戰(zhàn):定時(shí)器泄漏比較隱蔽,進(jìn)入退出查看控制器數(shù)量是否增長;再進(jìn)而使用Leaks工具排查
?步驟 2:看引用鏈
從可疑對象出發(fā)(如LeakingViewController、LeakyClass),順著箭頭看誰在引用它,誰被它引用。
重點(diǎn)關(guān)注強(qiáng)引用循環(huán)(A→B→C→A)。實(shí)戰(zhàn):閉包強(qiáng)引用和對象相互引用最好排查
?步驟 3:結(jié)合代碼邏輯
回憶代碼中該對象的創(chuàng)建、賦值、引用方式:
定時(shí)器是否用了 block 且捕獲self?
自定義類是否有雙向引用(如sibling、delegate未弱引用)?
閉包是否強(qiáng)引用了外部對象?
?步驟 4:驗(yàn)證釋放時(shí)機(jī)
在代碼中手動觸發(fā)釋放(如 pop 視圖控制器、銷毀單例),然后在 Memory Graph 中查看該對象是否消失。若仍存在,說明泄漏。
???實(shí)戰(zhàn):
引用箭頭:表示對象間的強(qiáng)引用關(guān)系(箭頭方向 = 引用方向,如 A→B 表示 A 強(qiáng)引用 B)。

? 快速檢查步驟
進(jìn)入退出目標(biāo)頁面,點(diǎn)擊 Memory Graph 圖標(biāo)
1.檢查左側(cè)對象列表:
是否有本應(yīng)釋放的對象數(shù)量不為0 (控制器數(shù)量增長)
是否有黃色警告三角
2.檢查右側(cè)引用圖:
是否存在強(qiáng)引用循環(huán)
是否存在意外的強(qiáng)引用鏈



