Instruments 使用(基于 Xcode8)

一拘领、Instruments簡(jiǎn)介

(1)Instruments 是應(yīng)用程序用來(lái)動(dòng)態(tài)跟蹤和分析 Mac OS X 和 iOS 代碼的實(shí)用工具。 這是一個(gè)靈活而強(qiáng)大的工具路呜,它讓你可以跟蹤一個(gè)或多個(gè)進(jìn)程蝗肪,并檢查收集的數(shù)據(jù)词顾。 這樣,Instruments 可以幫你更好的理解應(yīng)用程序和操作系統(tǒng)的行為垃它。

(2)Instruments包括 Blank(空白)鲜屏、Activity Monitor(活動(dòng)監(jiān)視器)、Allocations(內(nèi)存分配)国拇、Cocoa Layout(頁(yè)面布局)洛史、Core Animation(核心動(dòng)畫(huà))、Core Data(數(shù)據(jù)庫(kù))酱吝、counters(計(jì)數(shù)器)也殖、Energy Log(電量輸出日志)、File Activity(文件活動(dòng))务热、Leaks(內(nèi)存泄漏)忆嗜、Metal System Trace(金屬系統(tǒng)跟蹤)、NetWork(網(wǎng)絡(luò)監(jiān)測(cè))崎岂、System Trace(系統(tǒng)跟蹤)捆毫、Time Profiler(時(shí)間分析)、Zombies(僵尸對(duì)象)等16個(gè)功能冲甘。

(3)官方使用指南地址:

? ? ??https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide

二绩卤、Instruments啟動(dòng)方式

?(1)Xcode -> Open Developer Tool -> Instruments

(2)Product -> Profile

(3)長(zhǎng)按啟動(dòng)按鈕 -> Profile


三途样、Instruments使用

(1)Activity Monitor 活動(dòng)監(jiān)視器

(2)Allocations(內(nèi)存分配)

? ? ? ? 蘋(píng)果開(kāi)發(fā)文檔內(nèi)存分類(lèi):

? ? ? ? 1.Leaked memory: Memory unreferenced by your application that cannot be used again or freed (also detectable by using the ? ? ? ? ? ?Leaks instrument).

? ? ? ? ?2.Abandoned memory: Memory still referenced by your application that has no useful purpose.

? ? ? ? ?3.Cached memory: Memory still referenced by your application that might be used again for better performance.

? ? ? ? 其中Leaked memory 和Abandoned memory 都屬于應(yīng)該釋放而沒(méi)釋放的內(nèi)存,都是內(nèi)存泄露濒憋。

(3)Cocoa Layout? 頁(yè)面布局

? ? ? ? 觀察NSLayoutConstraint對(duì)象的改變何暇,幫助我們判斷什么時(shí)間什么地點(diǎn)的constraint是否合理。

(4)Core Animation 核心動(dòng)畫(huà)

? ? ? ? ?檢測(cè)Core Animation 性能工具跋炕,主要針對(duì)GPU和CPU的使用進(jìn)行優(yōu)化赖晶。通常會(huì)把屏幕渲染工作交給GPU來(lái)處理;CPU主要負(fù) ? ? ? ?責(zé)運(yùn)算等方面的處理辐烂。(Core Animation does not support the iOS Simulator platform)

? ? ?根據(jù)WWDC的說(shuō)法遏插,當(dāng)在滑動(dòng)視圖時(shí),F(xiàn)PS低于45的時(shí)候纠修,用戶會(huì)感覺(jué)到滑動(dòng)有卡頓胳嘲。

? ? ? ?1. Color Blended Layers (圖層混合)

? ? ? ? ? ? 界面都是會(huì)出現(xiàn)多個(gè)UI控件疊加的情況,如果有透明或者半透明的控件扣草,那么GPU會(huì)去計(jì)算這些這些layer最終的顯示的顏色了牛。基于渲染程度對(duì)屏幕中混合區(qū)域進(jìn)行綠到紅的高亮顯示辰妙,越紅表示性能越差鹰祸,會(huì)對(duì)幀率等指標(biāo)造成較大影響。

? ? ? ? ? ? 優(yōu)化方法:設(shè)置opaque 屬性為true密浑;調(diào)整布局蛙婴,盡量不要疊加;給View設(shè)置一個(gè)不透明的顏色尔破,沒(méi)有特殊需要設(shè)置白色即可街图。

? ? ? ? 2. Color Hits Green and Misses Red(光柵化)

? ? ? ? ? ? 當(dāng)UIView.layer.shouldRasterize = YES 時(shí),在觸發(fā)離屏繪制的同時(shí)懒构,會(huì)將光柵化后的內(nèi)容緩存起來(lái)餐济,如果對(duì)應(yīng)的layer及其sublayers沒(méi)有發(fā)生改變,在下一幀的時(shí)候可以直接復(fù)用胆剧。這將在很大程度上提升渲染性能絮姆。

? ? ? ? 3. Color Copied Images(圖片顏色格式)

? ? ?蘋(píng)果的GPU只解析32bit的顏色格式,對(duì)于GPU不支持的色彩格式的圖片只能由CPU來(lái)處理赞赖,這樣的圖片為藍(lán)色滚朵,藍(lán)色越多性能越差。因?yàn)槿绻跐L動(dòng)加載大量圖片時(shí)前域,由CPU來(lái)處理圖片辕近,可能會(huì)阻塞主線程。

? ? ? ? 4. Color Non-Standard Surface Formats (標(biāo)記不標(biāo)準(zhǔn)的表面顏色格式)

? ? ? ? 5. Color Immediately(顏色刷新頻率)

? ? ? ? ? ?當(dāng)執(zhí)行顏色刷新的時(shí)候移除10ms的延遲匿垄,因?yàn)榭赡茉谔囟ㄇ闆r下你不需要這些延遲移宅,所以使用此選項(xiàng)加快顏色刷新的頻率归粉。不過(guò)一般這個(gè)調(diào)試選項(xiàng)我們是用不到的。

? ? ? ? 6. Color Misaligned Images(圖片大小)

? ? ? ? ? 這個(gè)選項(xiàng)可以幫助我們查看圖片大小是否正確顯示漏峰。如果image size和imageView size不匹配糠悼,image會(huì)出現(xiàn)黃色。要盡可能的減少黃色的出現(xiàn)浅乔,因?yàn)閕mage size與imageView size不匹配倔喂,會(huì)消耗資源壓縮圖片。

? ? ? ? ?7. Color Offscreen-Rendered Yellow(離屏渲染)

? ? ? ? ? ? 離屏渲染Off-Screen Rendering 指的是GPU在當(dāng)前屏幕緩沖區(qū)以外新開(kāi)辟一個(gè)緩沖區(qū)進(jìn)行渲染操作靖苇。還有另外一種屏幕渲染方式-當(dāng)前屏幕渲染On-Screen Rendering 席噩,指的是GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩沖區(qū)中進(jìn)行。 離屏渲染會(huì)先在屏幕外創(chuàng)建新緩沖區(qū)贤壁,離屏渲染結(jié)束后悼枢,再?gòu)碾x屏切到當(dāng)前屏幕, 把離屏的渲染結(jié)果顯示到當(dāng)前屏幕上脾拆,這個(gè)上下文切換的過(guò)程是非常消耗性能的馒索,實(shí)際開(kāi)發(fā)中盡可能避免離屏渲染。

? ? ? ? ? 觸發(fā)離屏渲染Offscreen rendering的行為:

? ? ? ?(a)drawRect:方法

? ? ? ?(b)layer.shadow

? ? ? ?(c)layer.allowsGroupOpacity or layer.allowsEdgeAntialiasing

? ? ? ?(d)layer.shouldRasterize

? ? ? ?(e)layer.mask

? ? ? ?(f)layer.masksToBounds && layer.cornerRadius

? ? ? ? ? ?這里有需要注意的是第三條layer.shouldRasterize 名船,其實(shí)就是我們本文講的第二個(gè)選項(xiàng)光柵化绰上,光柵化會(huì)觸發(fā)離屏渲染,因此光柵化慎用渠驼。第六條設(shè)置圓角會(huì)觸發(fā)離屏渲染渔期,如果在某個(gè)頁(yè)面大量使用了圓角,會(huì)非常消耗性能造成FPS急劇下降渴邦,設(shè)置圓角觸發(fā)離屏渲染要同時(shí)滿足下面兩個(gè)條件:layer.masksToBounds = YES;layer.cornerRadius = 5;

? ? ? ? 為了盡可能避免觸發(fā)離屏渲染,我們可以使用貝塞爾曲線設(shè)置圓角拘哨。

? ? ? ?8. Color Compositing Fast-Path Blue (快速路徑)

? ? ? ? ? ?標(biāo)記由硬件繪制的路徑為藍(lán)色谋梭,藍(lán)色越多越好,可以對(duì)直接使用OpenGL繪制的圖層進(jìn)行高亮倦青。

? ? ? ?9. Flash Updated Regions (重繪區(qū)域)

? ? ? ? ? ?這個(gè)選項(xiàng)會(huì)對(duì)重繪的內(nèi)容高亮成黃色,重繪就是指使用Core Graphics繪制瓮床,繪制會(huì)損耗一定的性能,因此重繪區(qū)域應(yīng)該越小越好产镐。

(5)Core Data(數(shù)據(jù)庫(kù))

? ? ? ? 主要是用于監(jiān)測(cè)讀取隘庄、緩存未命中、保存等操作癣亚,能直觀顯示是否保存次數(shù)遠(yuǎn)超實(shí)際需要丑掺。

(6)counters(計(jì)數(shù)器)

? ? ? ? 從用戶管理的點(diǎn)事件計(jì)數(shù)器儀器記錄信息。它可以記錄從一個(gè)過(guò)程或系統(tǒng)上運(yùn)行的所有進(jìn)程的信息述雾。需要真機(jī)測(cè)試

(7)Energy Diagnostic? 能量診斷

? ? ? ? ?用于Xcode下的Instruments來(lái)分析手機(jī)電量消耗的街州。(需要真機(jī)測(cè)試)

(8)File Activity? 文件活動(dòng)

? ? ? ? ?這個(gè)模板活動(dòng)監(jiān)視器文件和目錄,包括文件打開(kāi)或者關(guān)閉兼丰,文件權(quán)限修改,目錄創(chuàng)建唆缴,文件移動(dòng)等鳍征。不支持iOS 平臺(tái)。

(9)Leaks 內(nèi)存泄漏

? ? ? ? 查看內(nèi)存使用情況面徽,檢查泄漏內(nèi)存艳丛,并提供按類(lèi)別分配對(duì)象內(nèi)存地址以及內(nèi)存地址歷史分配記錄和泄漏塊的統(tǒng)計(jì)信息。

? ?1. Separate by Category 類(lèi)別分離

? ?2. Separate by Thread ?線程分離,只有這樣才能在調(diào)用路徑中能夠清晰看到占用CPU最大的線程.

? ?3. ?Invert Call Tree?從上到下跟蹤堆棧信息.這個(gè)選項(xiàng)可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時(shí),比如FuncA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級(jí)最深的C顯示最外面.

? ?4. Hide System Libraries 隱藏系統(tǒng)調(diào)用庫(kù)

? ?5. Flatten Recursion ?處理遞歸(自己調(diào)用自己)趟紊,在每個(gè)棧中只跟蹤一個(gè)氮双,而不是多個(gè)。

(10)Metal System Trace(金屬系統(tǒng)跟蹤)

金屬系統(tǒng)跟蹤通過(guò)從應(yīng)用程序织阳,驅(qū)動(dòng)程序和gpu層提供跟蹤信息來(lái)描述ios和macos金屬應(yīng)用程序的性能眶蕉。

(11)Network 網(wǎng)絡(luò)監(jiān)測(cè)

分析應(yīng)用程序如何使用TCP / IP和UDP / IP連接使用連接儀器。

(12)System Trace? 系統(tǒng)跟蹤

? ? ? ? 該模板提供了系統(tǒng)行為的全面信息唧躲。它顯示線程何時(shí)調(diào)度造挽,并顯示從用戶到系統(tǒng)代碼的線程轉(zhuǎn)換,通過(guò)系統(tǒng)調(diào)用和內(nèi)存操作弄痹。這個(gè)模板可以在OS X操作系統(tǒng)和iOS上使用饭入。

(13)System Usage? 系統(tǒng)使用

? ? ? ? ?這個(gè)模板監(jiān)視一個(gè)應(yīng)用程序和記錄系統(tǒng)的I / O活動(dòng)相關(guān)的文件,套接字和共享內(nèi)存肛真。這包括輸入谐丢,輸出,時(shí)間回溯蚓让,調(diào)用樹(shù)乾忱,乃至每一次響應(yīng)。該模板只可用于iOS历极。

(14)Time Profiler? 時(shí)間分析器

? ? ? ? ?用來(lái)檢測(cè)app中每個(gè)方法所用的時(shí)間窄瘟,并且可以排序,并查找出哪些函數(shù)占用了大量時(shí)間趟卸。


(15)Zombies? 僵尸對(duì)象

? ? ? ? ?用來(lái)檢測(cè)過(guò)度釋放的“僵尸”對(duì)象蹄葱,還提供了數(shù)據(jù)對(duì)象分配的類(lèi)以及所有活動(dòng)分配內(nèi)存地址的歷史記錄。

? ? ? ? ?使用Zombies工具來(lái)查找僵尸對(duì)象: Zombies工具的查找原理其實(shí)和設(shè)置NSZombieEnabled環(huán)境變量的調(diào)試方法是一樣的锄列,啟動(dòng)Zombies后在內(nèi)部設(shè)置了NSZombieEnabled為true图云。

? ? ? ? ?啟用了NSZombieEnabled的話,它會(huì)用一個(gè)僵尸對(duì)象來(lái)代替已釋放對(duì)象邻邮。也就是在引用計(jì)數(shù)降到0時(shí)竣况,該僵尸實(shí)現(xiàn)會(huì)將該對(duì)象轉(zhuǎn)換成僵尸對(duì)象。僵尸對(duì)象的作用是在你向它發(fā)送消息時(shí)筒严,就不會(huì)向之前那樣Crash或者產(chǎn)生 一個(gè)難以理解的行為帕翻,而是放出一個(gè)錯(cuò)誤消息鸠补,它會(huì)顯示一段日志并自動(dòng)跳入調(diào)試器, 因此我們就可以找到具體或者大概是哪個(gè)對(duì)象被錯(cuò)誤的釋放了嘀掸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末紫岩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睬塌,更是在濱河造成了極大的恐慌泉蝌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揩晴,死亡現(xiàn)場(chǎng)離奇詭異勋陪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)硫兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)诅愚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人劫映,你說(shuō)我怎么就攤上這事违孝。” “怎么了泳赋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雌桑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祖今,道長(zhǎng)校坑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任千诬,我火速辦了婚禮耍目,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徐绑。我一直安慰自己制妄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布泵三。 她就那樣靜靜地躺著,像睡著了一般衔掸。 火紅的嫁衣襯著肌膚如雪烫幕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天敞映,我揣著相機(jī)與錄音较曼,去河邊找鬼。 笑死振愿,一個(gè)胖子當(dāng)著我的面吹牛捷犹,可吹牛的內(nèi)容都是我干的弛饭。 我是一名探鬼主播萍歉,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侣颂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了枪孩?” 一聲冷哼從身側(cè)響起憔晒,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔑舞,沒(méi)想到半個(gè)月后拒担,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攻询,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年从撼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧栖。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡低零,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桐经,到底是詐尸還是另有隱情毁兆,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布阴挣,位于F島的核電站气堕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畔咧。R本人自食惡果不足惜茎芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誓沸。 院中可真熱鬧梅桩,春花似錦、人聲如沸拜隧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洪添。三九已至垦页,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間干奢,已是汗流浹背痊焊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薄啥。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓辕羽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垄惧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刁愿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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