原文iOS?—?Identifying Memory Leaks using the Xcode Memory Graph Debugger
這篇文章主要介紹
- 什么是Xcode memory graph debugger
- 怎樣使用及一些tips
- 優(yōu)缺點(diǎn)
What is it
長話短說, memory graph debugger回答了為什么一個(gè)對象存在內(nèi)存中假丧?
Xcode memory graph debugger可以幫助找到和修復(fù)循環(huán)引用與內(nèi)存泄露酗洒。當(dāng)被激活時(shí)偶翅,會(huì)暫停app運(yùn)行,展現(xiàn)當(dāng)前堆中的對象龙致,對象的關(guān)系端礼,對象間的引用。
How to use it
3個(gè)步驟檢查循環(huán)引用和內(nèi)存泄露
- 在Xcode scheme editor中選中stack logging integration株茶,如圖
- 執(zhí)行你想要分析的app,通過點(diǎn)擊如下按鈕進(jìn)入memory graph debugging模式:
- memory graph debugging會(huì)暫停app運(yùn)行并展示如圖:
左邊展示app堆中的內(nèi)容
選中一個(gè)實(shí)例可以在中間展現(xiàn)實(shí)例的引用
選中中間的實(shí)例可以生成對象的內(nèi)存信息图焰,內(nèi)存泄露信息如下:
Tips
- 為了確定內(nèi)存泄露启盛,我們可以通過如圖方法選擇堆內(nèi)容僅僅展示泄露
- 運(yùn)行時(shí)信息是有用的,可以展示全部泄露數(shù)
The good and the bad
- 優(yōu)點(diǎn):可以輕松地找到一些簡單的泄露技羔,比如循環(huán)引用僵闯。例如一個(gè)對象在閉包中持有自己,通過閉包捕獲列表可以輕易修復(fù)內(nèi)存泄露藤滥。
- 缺點(diǎn):可能找不到已經(jīng)泄露的點(diǎn)鳖粟。比如童漩,創(chuàng)建一個(gè)UIButton對象并在上面天津一個(gè)UIToolBars items數(shù)組边翁,我們只能看到這發(fā)生了內(nèi)存泄露卻看不到為什么泄露有额。
Useful links
- https://developer.apple.com/videos/play/wwdc2016/410/
- https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-DontLinkElementID_1
- https://useyourloaf.com/blog/xcode-visual-memory-debugger/