Instruments使用

Instruments 簡介
Instruments 是 Xcode 的一個工具集匹表,為我們提供了強(qiáng)大的程序性能分析及測試能力访雪。使用 Instruments 你可以做下面這些事:
檢查一個或多個應(yīng)用或進(jìn)程的行為。
檢查設(shè)備相關(guān)的功能持灰,比如:Wi-Fi湿蛔、藍(lán)牙等。
在真機(jī)或模擬器上進(jìn)行性能測試酒唉。
創(chuàng)建自定義的 DTrace 來分析系統(tǒng)以及應(yīng)用的各種行為。
跟蹤源碼中的問題沸移。
對 App 進(jìn)行性能分析痪伦。
查找 App 中的內(nèi)存問題,比如:內(nèi)存泄露(Leaked memory)雹锣、廢棄內(nèi)存(Abandoned memory)网沾、僵尸(zombies)等。
給出程序優(yōu)化的建議蕊爵。
進(jìn)行系統(tǒng)級別的問題定位绅这。
通過腳本記錄一個用戶行為序列,從而可以通過運(yùn)行腳本對你的 iOS 應(yīng)用進(jìn)行可重復(fù)多次的自動化測試在辆。
保存測試配置模板以供復(fù)用。

可以看到 Instruments 功能很多度苔,這里先介紹一下我們在開發(fā)中常用到的幾種:CPU 性能測試匆篓、圖形性能測試、內(nèi)存性能測試寇窑。
雖然 Instruments 是 Xcode 的一個工具集鸦概,但是它是以一個獨(dú)立的 App 的形式存在的,你可以在 Xcode -> Open Developer Tool -> Instruments
中打開它。
CPU 性能
要看程序執(zhí)行時間性能窗市,主要有下面幾步:
1先慷、先在 Xcode 中對當(dāng)前的項目做 Profile (Command-I):


image

這時就會打開 Profiling Template 選項對話框:


image

2、選擇 Time Profiler
這個模板咨察,并點(diǎn)擊 Choose
按鈕论熙。
image

3、進(jìn)入 Instruments 后摄狱,選擇正確的設(shè)備和應(yīng)用程序:
image

4脓诡、點(diǎn)擊紅色按鈕運(yùn)行后,就能得到 CPU 性能的結(jié)果了:
image

我們還能在時間軸面板里面去選擇一段時間來查看該時間段里更為細(xì)節(jié)的 CPU 性能:


image

同時在中間的導(dǎo)航條以及右下角的控制面板中媒役,我們還可以通過不同的選項來選擇數(shù)據(jù)展示的形式和維度祝谚。
image

image

從這個結(jié)果中,我們可以看到不同的線程以及方法調(diào)用占用的時間酣衷,從而可以評估出 CPU 性能的瓶頸和優(yōu)化方向交惯。
5、除此之外穿仪,我們還能在 Instruments 選擇使用 Counters
席爽、Activity Monitor
、System Trace
等 Profiling Template 對程序做 CPU 性能考量牡借。
圖形性能
關(guān)于圖形性能方面拳昌,我們平時最關(guān)注的應(yīng)該就是「幀率」這個概念了。在 Instruments 中钠龙,我們可以使用 Core Animation
  • Time Profiler
    來評估圖形性能炬藤。使用步驟如下:
    1、同「CPU 占用性能測試」一樣碴里,先在 Xcode 中對當(dāng)前的項目執(zhí)行 Profile (Command-I)沈矿,并在打開的對話框中選擇 Core Animaiton
    這個模板:
    image

    2、進(jìn)入 Instruments 后咬腋,選擇正確的設(shè)備和應(yīng)用程序羹膳。
    3、點(diǎn)擊紅色按鈕運(yùn)行應(yīng)用程序根竿,隨著我們操作 App 界面陵像,就可以看到幀率的變化和數(shù)據(jù)了:
    image

    在滑動屏幕時,幀率越高表示性能越好寇壳,幀率過低則意味著屏幕可能會出現(xiàn)卡頓醒颖。
    4、在右下角面板的 Display Settings 區(qū)域壳炎,我們可以看到多個 Debug Options:
    Color Blended Layers
    泞歉,這個選項選項基于渲染程度對屏幕中的混合區(qū)域進(jìn)行綠到紅的高亮顯示,越紅表示性能越差,會對幀率等指標(biāo)造成較大的影響腰耙。紅色通常是由于多個半透明圖層疊加引起榛丢。
    Color Hits Green and Misses Red
    ,當(dāng) UIView.layer.shouldRasterize = YES
    時挺庞,耗時的圖片繪制會被緩存晰赞,并當(dāng)做一個簡單的扁平圖片來呈現(xiàn)。這時候挠阁,如果頁面的其他區(qū)塊(比如 UITableViewCell 的復(fù)用)使用緩存直接命中宾肺,就顯示綠色,反之侵俗,如果不命中锨用,這時就顯示紅色。紅色越多隘谣,性能越差增拥。因為柵格化生成緩存的過程是有開銷的,如果緩存能被大量命中和有效使用寻歧,則總體上會降低開銷掌栅,反之則意味著要頻繁生成新的緩存,這會讓性能問題雪上加霜码泛。
    Color Copied Images
    猾封,對于 GPU 不支持的色彩格式的圖片只能由 CPU 來處理,把這樣的圖片標(biāo)為藍(lán)色噪珊。藍(lán)色越多晌缘,性能越差。因為痢站,我們不希望在滾動視圖的時候磷箕,由 CPU 來處理圖片,這樣可能會對主線程造成阻塞阵难。
    Color Immediately
    岳枷,通常 Core Animation Instruments 以每毫秒 10 次的頻率更新圖層調(diào)試顏色。對某些效果來說呜叫,這顯然太慢了空繁。這個選項就可以用來設(shè)置每幀都更新(可能會影響到渲染性能,而且會導(dǎo)致幀率測量不準(zhǔn)朱庆,所以不要一直都設(shè)置它)盛泡。
    Color Misaligned Images
    ,這個選項檢查了圖片是否被縮放椎工,以及像素是否對齊。被放縮的圖片會被標(biāo)記為黃色,像素不對齊則會標(biāo)注為紫色维蒙。黃色掰吕、紫色越多,性能越差颅痊。
    Color Offscreen-Rendered Yellow
    殖熟,這個選項會把那些離屏渲染的圖層顯示為黃色。黃色越多斑响,性能越差菱属。這些顯示為黃色的圖層很可能需要用 shadowPath 或者 shouldRasterize 來優(yōu)化。
    Color OpenGL Fast Path Blue
    舰罚,這個選項會把任何直接使用 OpenGL 繪制的圖層顯示為藍(lán)色纽门。藍(lán)色越多,性能越好营罢。如果僅僅使用 UIKit 或者 Core Animation 的 API赏陵,那么不會有任何效果。如果使用 GLKView 或者 CAEAGLLayer饲漾,那如果不顯示藍(lán)色塊的話就意味著你正在強(qiáng)制 CPU 渲染額外的紋理蝙搔,而不是繪制到屏幕。
    Flash Updated Regions
    考传,這個選項會把重繪的內(nèi)容顯示為黃色吃型。不該出現(xiàn)的黃色越多,性能越差僚楞。通常我們希望只是更新的部分被標(biāo)記完黃色勤晚。

我們可以使用這些選項,來監(jiān)測更加具體的圖形性能镜硕。
5运翼、我們還可以選擇使用 OpenGL ES Analysis
、GPU Driver
等模板來監(jiān)測圖形相關(guān)性能兴枯。
內(nèi)存性能
Instruments 可以幫我們了解到應(yīng)用程序使用內(nèi)存的幾個方面:
全局內(nèi)存使用情況(Overall Memory Use)
: 從全局的角度監(jiān)測應(yīng)用程序的內(nèi)存使用情況血淌,捕捉非預(yù)期的或大幅度的內(nèi)存增長。
內(nèi)存泄露(Leaked memory)
: 未被你的程序引用财剖,同時也不能被使用或釋放的內(nèi)存悠夯。
廢棄內(nèi)存(Abandoned memory)
: 被你的程序引用,但是沒什么卵用的內(nèi)存躺坟。
僵尸對象(Zombies)
: 僵尸對象指的是對應(yīng)的內(nèi)存已經(jīng)被釋放并且不再會使用到沦补,但是你的程序卻在某處依然有指向它的引用。在 iOS 中有一個 NSZombie 機(jī)制咪橙,這個是為了內(nèi)存調(diào)試的目的而設(shè)計的一種機(jī)制夕膀。在這個機(jī)制下虚倒,當(dāng)你 NSZombieEnabled 為 YES 時,當(dāng)一個對應(yīng)的引用計數(shù)減為 0 時产舞,這個對象不會被釋放魂奥,當(dāng)這個對象再收到任何消息時,它會記錄一條 warning易猫,而不是直接崩潰耻煤,以方便我們進(jìn)行程序調(diào)試。

這里我們介紹下查找內(nèi)存泄露的過程:
1准颓、同「CPU 占用性能測試」一樣哈蝇,先在 Xcode 中對當(dāng)前的項目執(zhí)行 Profile (Command-I),并在打開的對話框中選擇 Leaks
這個模板:


image

2攘已、進(jìn)入 Instruments 后炮赦,選擇正確的設(shè)備和應(yīng)用程序。
3贯被、點(diǎn)擊紅色按鈕運(yùn)行應(yīng)用程序眼五,我們可以看到如下界面:


image

4、在 Display Settings 中勾選 Invert Call Tree
和 Hide System Libraries
或其他選項可以過濾顯示的數(shù)據(jù)彤灶。
[圖片上傳中看幼。。幌陕。(13)]

5诵姜、在導(dǎo)航欄的篩選框中,我們可以輸入關(guān)鍵字來篩選數(shù)據(jù)搏熄。


image

6棚唆、在實際使用中,我們進(jìn)入一個頁面后再退出心例,發(fā)現(xiàn)相關(guān)的內(nèi)存分配沒有清空宵凌,這時候就發(fā)生內(nèi)存泄露了。我們查看更細(xì)節(jié)的調(diào)用信息止后,追蹤到可能造成內(nèi)存泄露的代碼位置:
image

7瞎惫、我們還可以使用 Activity Monitor
、Allocations
译株、Zombies
等模板來針對性地做內(nèi)存監(jiān)測瓜喇。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市歉糜,隨后出現(xiàn)的幾起案子乘寒,更是在濱河造成了極大的恐慌,老刑警劉巖匪补,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞辛,死亡現(xiàn)場離奇詭異烂翰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚤氏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門刽酱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞧捌,你說我怎么就攤上這事∪笪模” “怎么了姐呐?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長典蝌。 經(jīng)常有香客問我曙砂,道長,這世上最難降的妖魔是什么骏掀? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任鸠澈,我火速辦了婚禮,結(jié)果婚禮上截驮,老公的妹妹穿的比我還像新娘笑陈。我一直安慰自己,他們只是感情好葵袭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布涵妥。 她就那樣靜靜地躺著,像睡著了一般坡锡。 火紅的嫁衣襯著肌膚如雪蓬网。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天鹉勒,我揣著相機(jī)與錄音帆锋,去河邊找鬼。 笑死禽额,一個胖子當(dāng)著我的面吹牛锯厢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绵疲,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼哲鸳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盔憨?” 一聲冷哼從身側(cè)響起徙菠,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郁岩,沒想到半個月后婿奔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缺狠,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年萍摊,在試婚紗的時候發(fā)現(xiàn)自己被綠了挤茄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡冰木,死狀恐怖穷劈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踊沸,我是刑警寧澤歇终,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站逼龟,受9級特大地震影響评凝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腺律,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一奕短、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匀钧,春花似錦翎碑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吊圾,卻和暖如春达椰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背项乒。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工啰劲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檀何。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓蝇裤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親频鉴。 傳聞我的和親對象是個殘疾皇子栓辜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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