Zombies性能分析模版使用配置工具測(cè)量你的app的通常內(nèi)存使用臼隔。關(guān)注于過度釋放的“僵尸”對(duì)象,“僵尸”對(duì)象是指在被釋放了之后再被訪問的對(duì)象妄壶,事實(shí)上已經(jīng)不存在了摔握。
在這個(gè)模版中,這個(gè)分配工具配置了NSZombies偵查的支持丁寄。將環(huán)境變量NSZombieEnabled設(shè)置為true是一個(gè)調(diào)試方式氨淌,觀察編譯器設(shè)置NSZombie作為任何被過度釋放的“僵尸”對(duì)象(引用技術(shù)為0泊愧,已經(jīng)不存在了)的代替品。如果一個(gè)消息被發(fā)送給這個(gè)對(duì)象(現(xiàn)在是一個(gè)“僵尸”對(duì)象)盛正,這個(gè)zombie會(huì)被懸掛到删咱,應(yīng)用閃退,記錄暫停豪筝,一個(gè)“僵尸”對(duì)象收到了消息會(huì)話痰滋。然后你可以根據(jù)僵尸對(duì)象引用和釋放的歷史來準(zhǔn)備定位是哪里的問題。
注意:
Zombies模版在使用的時(shí)候會(huì)導(dǎo)致內(nèi)存的飆升续崖,這是因?yàn)樗斜会尫诺膶?duì)象被僵尸對(duì)象取代敲街,并未真的釋放掉,在結(jié)束Zombies時(shí)會(huì)釋放严望,這是預(yù)知行為多艇,這就意味著instrument里的其它工具和Zombies是不能同時(shí)使用的,Zombies會(huì)導(dǎo)致其它的數(shù)據(jù)不準(zhǔn)像吻。包括leaks峻黍,你也不應(yīng)該把它加到Zombies模版中,即使這么做了結(jié)果也沒什么意義拨匆。對(duì)于iOS應(yīng)用來說姆涩,在用Zombies模版時(shí)使用iOS模擬器比真機(jī)要好。
Zombies使用:
1.啟動(dòng)Instruments涮雷。
2.在模版選擇器中阵面,點(diǎn)擊Zombies。
3.選擇app和目標(biāo)設(shè)備洪鸭。
4.點(diǎn)擊選擇創(chuàng)建路徑文檔
5.點(diǎn)擊工具欄紅色圓形按鈕或command+r開始記錄样刷。
6.正常使用你的app
如果一個(gè)被過度釋放的對(duì)象被訪問了,在timeline窗口里會(huì)被插入一個(gè)標(biāo)記同時(shí)僵尸對(duì)象被會(huì)話訪問出現(xiàn)览爵。這表示在某個(gè)內(nèi)存地址上一個(gè)僵尸對(duì)象對(duì)訪問了置鼻。你可以通過點(diǎn)擊打開和關(guān)閉Zombie Messaged Dialog(僵尸對(duì)象訪問會(huì)話)
7.點(diǎn)擊灰白色橫向箭頭到僵尸對(duì)象的內(nèi)存地址并且顯示僵尸對(duì)象詳細(xì)內(nèi)存歷史的窗口,包括相對(duì)應(yīng)的引用計(jì)數(shù)和方法調(diào)用蜓竹。
8.在詳細(xì)窗口選擇Zombie事件(或者是其它你想研究的事件)
9.輸入(Command+3)顯示選擇事件的棧軌跡的擴(kuò)展詳細(xì)區(qū)域箕母。
10.點(diǎn)擊Collapse按鈕在擴(kuò)展詳細(xì)區(qū)域隱藏棧軌跡.這樣更容易看到你的應(yīng)用的方法。
通過用戶icon標(biāo)志Calls使你的app標(biāo)記為黑色并置前俱济。
11.棧軌跡區(qū)雙擊方法顯示它的代碼在Instruments中嘶是。
12.點(diǎn)擊Xcode按鈕在詳細(xì)窗口頂部用于打開這代碼在Xcode的編輯界面。
雖然Instruments可以幫你發(fā)現(xiàn)“僵尸”對(duì)象蛛碌,但是你仍然需要仔細(xì)檢查關(guān)系內(nèi)存歷史來確定并解決問題聂喇。以下是常見導(dǎo)致僵尸對(duì)象的情況。
*release一個(gè)已經(jīng)被release或者autorelease的對(duì)象
*對(duì)象需要被retain時(shí)沒有被retain
*一些調(diào)用發(fā)生在對(duì)象被release之后
(前兩個(gè)在ARC中應(yīng)該不會(huì)出現(xiàn),第三個(gè)倒是極有可能)
最后附上一個(gè)推酷大神的教程:地址在這