Xcode Instruments的使用

Xcode Instruments是用于動(dòng)態(tài)調(diào)追蹤和分析OS X和iOS的代碼的性能分析和測(cè)試工具堕扶;

打開(kāi)方式:

Xcode -> Open Developer Tool -> Instruments


image.png

其中比較常用的:

·Leaks:一般的查看內(nèi)存使用情況,檢查泄漏的內(nèi)存搭幻,并提供了所有活動(dòng)的分配和泄漏模塊的類(lèi)對(duì)象分配統(tǒng)計(jì)·信息以及內(nèi)存地址歷史記錄
·Time Profiler:分析代碼的執(zhí)行時(shí)間,執(zhí)行對(duì)系統(tǒng)的CPU上運(yùn)行的進(jìn)程低負(fù)載時(shí)間為基礎(chǔ)采樣

其他的:

·Blank:創(chuàng)建一個(gè)空的模板,可以從Library庫(kù)中添加其他模板
·Allocations:用來(lái)檢查內(nèi)存分配,跟蹤過(guò)程的匿名虛擬內(nèi)存和堆的對(duì)象提供類(lèi)名和可選保留/釋放歷史
·Activity Monitor:顯示器處理的CPU大咱、內(nèi)存和網(wǎng)絡(luò)使用情況統(tǒng)計(jì)
·Automation:用JavaScript語(yǔ)言編寫(xiě),主要用于分析應(yīng)用的性能和用戶(hù)行為注益,模仿/擊發(fā)被請(qǐng)求的事件碴巾,利用它可以完成對(duì)被測(cè)應(yīng)用的簡(jiǎn)單的UI測(cè)試及相關(guān)功能測(cè)試
·Cocoa Layout:觀察約束變化,找出布局代碼的問(wèn)題所在聊浅。
·Core Animation:用來(lái)檢測(cè)Core Animation性能的餐抢,給我們提供了周期性的FPS,并且考慮到了發(fā)生在程序之外的動(dòng)畫(huà)低匙,界面滑動(dòng)FPS可以進(jìn)行測(cè)試
·Core Data:監(jiān)測(cè)讀取旷痕、緩存未命中、保存等操作顽冶,能直觀顯示是否保存次數(shù)遠(yuǎn)超實(shí)際需要
·Energy Diagnostic :用于Xcode下的Instruments來(lái)分析手機(jī)電量消耗的欺抗。(必須是真機(jī)才有電量)
·GPU Driver :可以測(cè)量GPU的利用率,同樣也是一個(gè)很好的來(lái)判斷和GPU相關(guān)動(dòng)畫(huà)性能的指示器强重。它同樣也提供了類(lèi)似Core Animtaion那樣顯示FPS的工具绞呈。
·Network:分析應(yīng)用程序如何使用TCP / IP和UDP / IP連接使用連接儀器。就是檢查手機(jī)網(wǎng)速的间景。(這個(gè)最好是真機(jī))
·Zombies:檢查是否訪問(wèn)了僵尸對(duì)象

一佃声、Leaks(泄漏)

1.內(nèi)存溢出和內(nèi)存泄漏的區(qū)別

內(nèi)存溢出 out of memory,是指程序在申請(qǐng)內(nèi)存時(shí)倘要,沒(méi)有足夠的內(nèi)存空間供其使用圾亏,出現(xiàn)out of memory;比如申請(qǐng)了一個(gè)integer,但給它存了long才能存下的數(shù)封拧,那就是內(nèi)存溢出志鹃。

內(nèi)存泄露 memory leak,是指程序在申請(qǐng)內(nèi)存后泽西,無(wú)法釋放已申請(qǐng)的內(nèi)存空間曹铃,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很?chē)?yán)重捧杉,無(wú)論多少內(nèi)存,遲早會(huì)被占光陕见。
memory leak會(huì)最終會(huì)導(dǎo)致out of memory!

在前面的ALLcations里面我們提到過(guò)內(nèi)存泄漏就是應(yīng)該釋放而沒(méi)有釋放的內(nèi)存糠溜。而內(nèi)存泄漏分為兩種:Leaked Memory 和 Abandoned Memory淳玩。前面我們講到了如何找到Abandoned Memory被遺忘的內(nèi)存,現(xiàn)在我們研究的就是Leaked Memory非竿。

以發(fā)生的方式來(lái)分類(lèi)蜕着,內(nèi)存泄漏可以分為4類(lèi):

1.常發(fā)性?xún)?nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到,每次被執(zhí)行的時(shí)候都會(huì)導(dǎo)致一塊內(nèi)存泄漏。
2.偶發(fā)性?xún)?nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過(guò)程下才會(huì)發(fā)生承匣。常發(fā)性和偶發(fā)性是相對(duì)的蓖乘。對(duì)于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的韧骗。所以測(cè)試環(huán)境和測(cè)試方法對(duì)檢測(cè)內(nèi)存泄漏至關(guān)重要嘉抒。
3.一次性?xún)?nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷袍暴,導(dǎo)致總會(huì)有一塊僅且一塊內(nèi)存發(fā)生泄漏些侍。比如,在類(lèi)的構(gòu)造函數(shù)中分配內(nèi)存政模,在析構(gòu)函數(shù)中卻沒(méi)有釋放該內(nèi)存岗宣,所以?xún)?nèi)存泄漏只會(huì)發(fā)生一次。
4.隱式內(nèi)存泄漏:程序在運(yùn)行過(guò)程中不停的分配內(nèi)存淋样,但是直到結(jié)束的時(shí)候才釋放內(nèi)存耗式。嚴(yán)格的說(shuō)這里并沒(méi)有發(fā)生內(nèi)存泄漏,因?yàn)樽罱K程序釋放了所有申請(qǐng)的內(nèi)存趁猴。但是對(duì)于一個(gè)服務(wù)器程序刊咳,需要運(yùn)行幾天,幾周甚至幾個(gè)月儡司,不及時(shí)釋放內(nèi)存也可能導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存娱挨。所以,我們稱(chēng)這類(lèi)內(nèi)存泄漏為隱式內(nèi)存泄漏捕犬。

也可以通過(guò)以下方式打開(kāi)

image.png

有泄漏時(shí)長(zhǎng)這樣


image.png

這樣設(shè)置


image.png

然后就可以通過(guò)雙擊到相對(duì)于的代碼中啦

二让蕾、Time Profiler(時(shí)間分析器)

檢測(cè)app中每個(gè)方法所用的時(shí)間,可以進(jìn)行排序或听、查找出占用了大量時(shí)間的函數(shù)。
使用Time Profile前有兩點(diǎn)需要注意的地方:

1笋婿、一定要使用真機(jī)調(diào)試

因?yàn)槟M器運(yùn)行在Mac上誉裆,Mac上的GPU和iOS設(shè)備的完全不一樣,模擬器不得已要在軟件層面(CPU)模擬設(shè)備的GPU缸濒,這意味著GPU相關(guān)的操作在模擬器上運(yùn)行的更慢足丢,尤其是使用CAEAGLLayer來(lái)寫(xiě)一些OpenGL的代碼時(shí)候,這就導(dǎo)致模擬器性能數(shù)據(jù)和用戶(hù)真機(jī)使用性能數(shù)據(jù)相去甚遠(yuǎn)庇配。

2斩跌、應(yīng)用程序一定要使用發(fā)布配置

在發(fā)布環(huán)境打包的時(shí)候,編譯器會(huì)引入一系列提高性能的優(yōu)化捞慌,例如去掉調(diào)試符號(hào)或者移除并重新組織代碼耀鸦。另iOS引入一種"Watch Dog"[看門(mén)狗]機(jī)制,不同的場(chǎng)景下,“看門(mén)狗”會(huì)監(jiān)測(cè)應(yīng)用的性能袖订,如果超出了該場(chǎng)景所規(guī)定的運(yùn)行時(shí)間氮帐,“看門(mén)狗”就會(huì)強(qiáng)制終結(jié)這個(gè)應(yīng)用的進(jìn)程。開(kāi)發(fā)者可以crashlog看到對(duì)應(yīng)的日志洛姑,但Xcode在調(diào)試配置下會(huì)禁用"Watch Dog"上沐。

運(yùn)行你的程序,并打開(kāi) Time Profiler

image.png

里面便是一個(gè)個(gè)函數(shù)名楞艾,點(diǎn)擊便可進(jìn)入


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末参咙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硫眯,更是在濱河造成了極大的恐慌蕴侧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟铜,死亡現(xiàn)場(chǎng)離奇詭異戈盈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谆刨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)塘娶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痊夭,你說(shuō)我怎么就攤上這事刁岸。” “怎么了她我?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵虹曙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我番舆,道長(zhǎng)酝碳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任恨狈,我火速辦了婚禮疏哗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禾怠。我一直安慰自己返奉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布吗氏。 她就那樣靜靜地躺著芽偏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弦讽。 梳的紋絲不亂的頭發(fā)上污尉,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼十厢。 笑死等太,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛮放。 我是一名探鬼主播缩抡,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼包颁!你這毒婦竟也來(lái)了瞻想?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娩嚼,失蹤者是張志新(化名)和其女友劉穎蘑险,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體岳悟,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佃迄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贵少。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呵俏。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滔灶,靈堂內(nèi)的尸體忽然破棺而出普碎,到底是詐尸還是另有隱情,我是刑警寧澤录平,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布麻车,位于F島的核電站,受9級(jí)特大地震影響斗这,放射性物質(zhì)發(fā)生泄漏动猬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一表箭、第九天 我趴在偏房一處隱蔽的房頂上張望枣察。 院中可真熱鬧,春花似錦燃逻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至握童,卻和暖如春姆怪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工稽揭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俺附,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓溪掀,卻偏偏與公主長(zhǎng)得像事镣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揪胃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354