iOS Instrument

Xcode工具解析

注:文參考apple官網(wǎng)Instruments User Guide

Page Not Found - Apple Developer

Analyze-xcode編輯和解析工具

iOS的分析工具可以發(fā)現(xiàn)編譯中的warning绸罗,內(nèi)存泄漏隱患谴咸,甚至還可以檢查出logic上的問(wèn)題偿枕;所以在自測(cè)階段一定要解決Analyze發(fā)現(xiàn)的問(wèn)題,可以避免出現(xiàn)嚴(yán)重的bug卵沉;

Analyze是靜態(tài)分析工具 可以通過(guò)菜單 Product→Analyze啟動(dòng)

內(nèi)存泄漏隱患提示:Potential Leak of an object allocated on line ……

數(shù)據(jù)賦值隱患提示:The left operand of …… is a garbage value;

對(duì)象引用隱患提示:Reference-Counted object is used after it is released;

App內(nèi)存問(wèn)題定位-Allocations

? ? ? ? ? ? ?管理內(nèi)存是app開(kāi)發(fā)中最重要的一個(gè)方面。不管是iOS手機(jī)還是mac OS 電腦,內(nèi)存都是緊缺資源硕并。對(duì)于很多開(kāi)發(fā)者來(lái)說(shuō)膊升,在程序架構(gòu)中減少內(nèi)存的使用通常都是使用Allocations Instrument去定位和找出減少內(nèi)存使用的方式怎炊,比如可能是改進(jìn)程序架構(gòu)和算法。但是廓译,再好的App設(shè)計(jì)都會(huì)被不同的內(nèi)存問(wèn)題困擾评肆。這一節(jié)就是講述 怎么樣使用工具去識(shí)別幾個(gè)通用的內(nèi)存問(wèn)題。

圖檢測(cè)到了App啟動(dòng)時(shí)的一個(gè)內(nèi)存消耗的各個(gè)進(jìn)程Category非区。根據(jù)這個(gè)開(kāi)發(fā)人員可以去改進(jìn)程序架構(gòu)和算法瓜挽。

Activity Monitor-內(nèi)存使用情況

關(guān)于Monitor有關(guān)小白簡(jiǎn)介送推薦看看-小白學(xué)習(xí)instrument之Activity Monitor - 簡(jiǎn)書(shū)

下面進(jìn)入進(jìn)階介紹:

Activity Monitor Trace Template 綜合統(tǒng)計(jì)了系統(tǒng)的活動(dòng),包括CPU征绸、memory久橙、disk 和 network。但是它僅僅包含了Activity Monitor管怠,你可以在Trace Template 中增加你想增加的工具淆衷。比如,后面你將會(huì)看到在iOS設(shè)備上可以在Activity Monitor 中可以觀察網(wǎng)絡(luò)活動(dòng)渤弛。Activity Monitor 工具捕獲加載在系統(tǒng)上的信息和虛擬內(nèi)存的大小進(jìn)行比較祝拯。它還可以記錄系統(tǒng)上一個(gè)或者多個(gè)程序的信息。它可以提供給你一個(gè)方便快捷的表格去觀察收集的信息暮芭, 下面是memory usage中兩個(gè)表格的詳細(xì)描述:

Real Memory Usage(bar graph):顯示使用內(nèi)存最多的五個(gè)

Real Memory Usage(pie chart): 顯示使用內(nèi)存最多的五個(gè)的內(nèi)存總量

這個(gè)記錄的設(shè)置面板的側(cè)邊欄的設(shè)置區(qū)域中包含了一系列的內(nèi)存統(tǒng)計(jì)鹿驼,是設(shè)置能夠通過(guò)計(jì)算一些數(shù)據(jù)顯示在記錄面板中欲低。選擇統(tǒng)計(jì)選項(xiàng)去查看具體的內(nèi)容。點(diǎn)擊圖形或者顏色去設(shè)置是否讓該項(xiàng)出現(xiàn)在記錄面板中畜晰。

這里有一系列Activity Monitor 工具支持的統(tǒng)計(jì)砾莱,下面這些是有關(guān)內(nèi)存的描述。

Physical Memory Wired

Physical Memory Active

Physical Memory Inactive

Physical Memory Used

Physical Memory Free

Total VM Size

VM Page In Bytes

VM Page Out Bytes

VM Swap Used

如果這些選項(xiàng)沒(méi)有出現(xiàn)在系統(tǒng)統(tǒng)計(jì)中凄鼻,就點(diǎn)擊下面的“Select statistics to list”腊瑟,然后點(diǎn)擊這些選項(xiàng)的復(fù)選框。

用Allocations Trace Template找出的Abandoned Memory內(nèi)存

你可以在App中用Allocations Trace Template找出系統(tǒng)Abandoned Memory(原文Abandoned Memory)块蚌。Abandoned Memory和內(nèi)存泄露不一樣闰非。內(nèi)存泄露是你先前分配的內(nèi)存但是長(zhǎng)時(shí)間沒(méi)有引用去引用它,換句話(huà)說(shuō)峭范,你沒(méi)有用任何的方式去釋放它财松。Abandoned Memory就是你分配的內(nèi)存由于一些原因不再使用。也許你的應(yīng)用程序包含一個(gè)你從來(lái)沒(méi)有完全實(shí)現(xiàn)功能的一些代碼纱控,或者你有一個(gè)錯(cuò)誤的代碼中添加圖片緩 存辆毡,但它們已經(jīng)被緩存了。這些內(nèi)存都會(huì)影響App的整體內(nèi)存占用甜害,你應(yīng)該解決這些問(wèn)題使得你的應(yīng)該程序更加高效舶掖。

因?yàn)楸籄bandoned Memory在技術(shù)上依然是有效的,但是不再有用尔店。Leaks Instrument沒(méi)有辦法去識(shí)別它們眨攘。因此,你必須執(zhí)行一些檢測(cè)的工作去定位這些問(wèn)題嚣州。Allocations Trace Template幫助App跟蹤堆內(nèi)存的分配和使用鲫售,很詳細(xì)的描述了每個(gè)類(lèi)的每個(gè)對(duì)象的內(nèi)存分配。它也能統(tǒng)計(jì)虛擬內(nèi)存的分配和使用記錄该肴。它包含了 Allocations和VM Tracker工具龟虎。如果是為了統(tǒng)計(jì)Abandoned Memory,就要使用Allocations工具沙庐。

用Allocations Template能保證在重復(fù)執(zhí)行一系列的操作的時(shí)候堆內(nèi)存不會(huì)繼續(xù)增加。例如佳吞,結(jié)束和開(kāi)始一個(gè)游戲拱雏,打開(kāi)和關(guān)閉一個(gè)窗口、設(shè)置和取消一個(gè)引用都是在概念 上相同的操作底扳,這樣讓你的App保持先前的內(nèi)存分配狀態(tài)铸抑。通過(guò)多次循環(huán)這樣的操作不會(huì)導(dǎo)致堆內(nèi)存的無(wú)限增長(zhǎng)。這種重復(fù)的分析過(guò)程叫做 “generational analysis”衷模∪笛矗“generation”代表在一段特定時(shí)間內(nèi)的一系列分配蒲赂。通過(guò)對(duì)多個(gè)“generation”動(dòng)作的重復(fù)操作,你可以分析結(jié)果刁憋, 觀察確定內(nèi)存分配的趨勢(shì)滥嘴。當(dāng)你發(fā)現(xiàn)了不正確的結(jié)果或者相矛盾的趨勢(shì),你可以研究是不是有Abandoned Memory至耻,然后你就可以改正它若皱。

1、打開(kāi)Allocations trace template

2.在工具條中選擇你的目標(biāo)app

3. 在側(cè)邊條中點(diǎn)擊顯示設(shè)置按鈕.

這可以讓你快速訪(fǎng)問(wèn)生成的標(biāo)記按鈕尘颓,使用它來(lái)為你的應(yīng)用標(biāo)記不同操作顯示的信息走触。

4. 在工具條中點(diǎn)擊紀(jì)錄按鈕去開(kāi)始記錄應(yīng)用

5.在App中執(zhí)行一系列的重復(fù)操作

為了準(zhǔn)確地生成的趨勢(shì)分析,這應(yīng)該是一組動(dòng)作的開(kāi)始和結(jié)束在相同的狀態(tài)疤苹。

6. 在每個(gè)重復(fù)動(dòng)作迭代完之后互广,點(diǎn)擊Mark Generation按鈕

在跟蹤面板中生成一個(gè)標(biāo)記去識(shí)別一個(gè)“generation”。

標(biāo)記的一系列“generation”都會(huì)在跟蹤面板中顯示卧土。每個(gè)“generation”都有一系列的內(nèi)存分配表惫皱。

7.重復(fù)第五歩和第六步幾次,直到你是否觀察到內(nèi)存無(wú)限增長(zhǎng)夸溶。然后點(diǎn)擊停止按鈕

這里 “generation”用作真正的分析逸吵。“generation”在你記錄開(kāi)始之后也能被標(biāo)記缝裁。在跟蹤面板的時(shí)間線(xiàn)上扫皱,簡(jiǎn)單的拖拽運(yùn)行的時(shí)間線(xiàn)到你想要的位置,然后在側(cè)邊欄中點(diǎn)擊Mark Generation捷绑。

8.在詳細(xì)的面板的中韩脑。點(diǎn)擊“generation”左邊的disclosure triangle按鈕來(lái)顯示“generation”包含的目標(biāo)。

9.查找App中仍然存在的分配的目標(biāo)粹污。選中一個(gè)段多,點(diǎn)擊它左邊的disclosure triangle按鈕來(lái)顯示它的Instance。

10.選擇其中一個(gè)Instance壮吩,在右邊的側(cè)邊欄中點(diǎn)擊Extended Detail去觀察分配stack trace进苍。

在stack trace中,你的代碼是很容易辨認(rèn)的鸭叙。因?yàn)樗呛谏木醢。懊嬗幸粋€(gè)用戶(hù)圖標(biāo)。為了使你的代碼更容易被找到沈贝,單擊collapse button 隱藏在stack trace上的系統(tǒng)調(diào)用代碼杠人。

11.在stack trace上雙擊進(jìn)入代碼顯示界面

點(diǎn)擊Xcode圖標(biāo)進(jìn)入Xcode界面顯示代碼。

12.評(píng)估你的代碼確定內(nèi)存分配是否正確。如果不正確嗡善,那說(shuō)明這個(gè)Abandoned Memory你應(yīng)該解決辑莫。

注意:除了幫助你識(shí)別被Abandoned Memory,generational analysis也可以用于定位內(nèi)存泄露和緩存的內(nèi)存泄漏罩引。如上所述各吨,泄漏的內(nèi)存(也可以用Leaks Instrument檢測(cè))是應(yīng)用程序沒(méi)有引用而且不能釋放或再次使用的內(nèi)存。高速緩存的內(nèi)存蜒程,是用于應(yīng)用程序再次使用以便獲得更好的性能的內(nèi)存绅你。

13.instrument 工具跟蹤應(yīng)用的內(nèi)存分配情況。

該 instrument 工具要 求你加載一個(gè)進(jìn)程,以便它能收集進(jìn)程開(kāi)始之后的數(shù)據(jù)昭躺。 該 instrument 工具捕獲以下信息:

類(lèi)別(Category)通常是一個(gè) Core Foundation 對(duì)象忌锯、Objective-C 類(lèi)、或原始 內(nèi)存塊(block)领炫。

凈分配字節(jié)數(shù)(Persistent Bytes):?????????????????????? 當(dāng)前已經(jīng)分配內(nèi)存但是仍然沒(méi)有被釋放的字節(jié)的總 數(shù)偶垮。

凈分配數(shù)(#Persistent):????????????????????????????????????? 當(dāng)前已經(jīng)分配內(nèi)存但仍然沒(méi)有被釋放的對(duì)象或內(nèi)存塊的數(shù)量。

臨時(shí)分配數(shù)(#Transient):??????????????????????????????????? 當(dāng)前已經(jīng)分配內(nèi)存但仍然沒(méi)有被釋放的對(duì)象或內(nèi)存塊的數(shù)量帝洪。

總分配字節(jié)數(shù)(Total Bytes):??????????????????????????????? 所有已經(jīng)分配內(nèi)存,而且包括已經(jīng)被釋放了的 字節(jié)的總數(shù)似舵。

總分配數(shù)(#Total):?????????????????????????????????????????????? 所有當(dāng)前已經(jīng)分配內(nèi)存,包括已經(jīng)被釋放了的對(duì)象或內(nèi)存 塊的總數(shù)。

臨時(shí)分配/全部?jī)?nèi)存分配(Transient/Total Bytes):當(dāng)前和全部分配數(shù)的直方圖葱峡。

當(dāng)比例變化時(shí),直方條會(huì)變顏色砚哗,Instruments 應(yīng)用通常給它們標(biāo)示不同的顏色來(lái)指出分配模式以便進(jìn)行進(jìn)一步的研 究。

詳細(xì)面板的數(shù)據(jù)表格包含了一個(gè)圖形列,其中包含了表中的每一行的復(fù)選框砰奕。當(dāng) 指定類(lèi)別的復(fù)選框被勾選時(shí),instrument 工具在跟蹤面板里面顯示特定類(lèi)別的圖形蛛芥。 Instruments 應(yīng)用通常給每個(gè)圖形類(lèi)別賦一個(gè)顏色。

當(dāng)你鼠標(biāo)移動(dòng)到詳細(xì)面板上面的類(lèi)別名稱(chēng)上時(shí),會(huì)在類(lèi)別名稱(chēng)的旁邊顯示一個(gè)更 多信息的按鈕军援。單擊該按鈕會(huì)顯示關(guān)于該類(lèi)別上的對(duì)象的詳細(xì)信息仅淑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胸哥,隨后出現(xiàn)的幾起案子涯竟,更是在濱河造成了極大的恐慌,老刑警劉巖空厌,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庐船,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嘲更,警方通過(guò)查閱死者的電腦和手機(jī)醉鳖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哮内,“玉大人,你說(shuō)我怎么就攤上這事”狈ⅲ” “怎么了纹因?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)琳拨。 經(jīng)常有香客問(wèn)我瞭恰,道長(zhǎng),這世上最難降的妖魔是什么狱庇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任惊畏,我火速辦了婚禮,結(jié)果婚禮上密任,老公的妹妹穿的比我還像新娘颜启。我一直安慰自己,他們只是感情好浪讳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布缰盏。 她就那樣靜靜地躺著,像睡著了一般淹遵。 火紅的嫁衣襯著肌膚如雪口猜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天透揣,我揣著相機(jī)與錄音济炎,去河邊找鬼。 笑死辐真,一個(gè)胖子當(dāng)著我的面吹牛须尚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆祈,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恨闪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了放坏?” 一聲冷哼從身側(cè)響起咙咽,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淤年,沒(méi)想到半個(gè)月后钧敞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麸粮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年溉苛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弄诲。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愚战,死狀恐怖娇唯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寂玲,我是刑警寧澤塔插,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站拓哟,受9級(jí)特大地震影響想许,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜断序,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一流纹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧违诗,春花似錦漱凝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至亮蒋,卻和暖如春扣典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慎玖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工贮尖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趁怔。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓湿硝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親润努。 傳聞我的和親對(duì)象是個(gè)殘疾皇子关斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容