版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2021.05.13 星期四 |
前言
MetricKit
由iOS13系統(tǒng)進(jìn)引入椿浓,用來(lái)匯總和分析有關(guān)異常和崩潰診斷以及電源和性能指標(biāo)的每個(gè)設(shè)備的報(bào)告取胎。下面我們就一起來(lái)看下這個(gè)框架。感興趣的可以看下面幾篇文章匪蟀。
1. MetricKit框架詳細(xì)解析(一) —— 基本概覽(一)
2. MetricKit框架詳細(xì)解析(二) —— Improving Your App's Performance(一)
3. MetricKit框架詳細(xì)解析(三) —— Reducing Your App's Memory Use(一)
Overview
通過(guò)評(píng)估和分析應(yīng)用程序來(lái)確定內(nèi)存使用效率低下的問(wèn)題椎麦。
Xcode
和Instruments
提供了多種工具來(lái)觀察和探索應(yīng)用程序中的內(nèi)存使用情況。
Review the Memory Report
當(dāng)您的應(yīng)用程序在Xcode中運(yùn)行時(shí)材彪,可從Xcode
的Debug
導(dǎo)航器中獲得的內(nèi)存報(bào)告顯示該應(yīng)用程序當(dāng)前的內(nèi)存使用情況以及看到的最大值观挎。 內(nèi)存規(guī)的黃色區(qū)域表示內(nèi)存使用量足夠高,可以觸發(fā)警告段化。 如果該應(yīng)用的內(nèi)存使用量進(jìn)入紅色區(qū)域键兜,則該應(yīng)用有被iOS終止的風(fēng)險(xiǎn)。
注意:如果
iOS
由于使用過(guò)多內(nèi)存而反復(fù)終止您的應(yīng)用程序穗泵,則可以在模擬器中調(diào)查其行為普气,然后在模擬器中繼續(xù)運(yùn)行。 在模擬器中運(yùn)行應(yīng)用程序時(shí)佃延,內(nèi)存量表始終停留在綠色(安全)區(qū)域现诀,因?yàn)?code>macOS不會(huì)發(fā)出內(nèi)存警告或內(nèi)存不足終止。 此行為在診斷與過(guò)多內(nèi)存使用相關(guān)的問(wèn)題方面具有優(yōu)勢(shì)履肃。 但是請(qǐng)記住仔沿,模擬器中儀表綠色區(qū)域內(nèi)的內(nèi)存使用并不一定意味著您的應(yīng)用程序的內(nèi)存使用處于安全范圍內(nèi)。
Inspect the Debug Memory Graph
您可以通過(guò)在工作區(qū)窗口底部的Xcode
調(diào)試區(qū)域中單擊Debug Memory Graph
按鈕來(lái)生成應(yīng)用程序中對(duì)象和分配的內(nèi)存圖尺棋。
內(nèi)存圖顯示了您的應(yīng)用程序正在使用的內(nèi)存區(qū)域以及每個(gè)區(qū)域的大小封锉。 圖中的節(jié)點(diǎn)表示對(duì)象,堆分配或內(nèi)存映射文件。 節(jié)點(diǎn)之間的連接(如箭頭所示)顯示了一個(gè)內(nèi)存區(qū)域引用另一個(gè)內(nèi)存區(qū)域的位置成福。
內(nèi)存圖顯示您的應(yīng)用程序在哪里使用內(nèi)存碾局,以及這些使用之間的關(guān)系。您可以使用allocation stack traces
來(lái)擴(kuò)充內(nèi)存圖表奴艾,以便每個(gè)區(qū)域都與在分配該區(qū)域的點(diǎn)記錄的調(diào)用堆棧跟蹤相關(guān)聯(lián)净当。
要打開(kāi)分配堆棧跟蹤(allocation stack traces)
,請(qǐng)?jiān)?code>scheme’s Run設(shè)置的Diagnostics
區(qū)域中選中Malloc Stack
框蕴潦。啟用分配堆棧跟蹤后像啼,內(nèi)存圖中節(jié)點(diǎn)的檢查器將顯示分配該節(jié)點(diǎn)時(shí)記錄的堆棧跟蹤。使用此信息將內(nèi)存圖中的內(nèi)存分配與應(yīng)用程序源代碼中的函數(shù)和方法相關(guān)聯(lián)潭苞。
要從Xcode導(dǎo)出內(nèi)存圖忽冻,請(qǐng)選擇File > Export Memory Graph
。您可以與團(tuán)隊(duì)成員共享導(dǎo)出的內(nèi)存圖此疹,也可以使用命令行工具(包括vmmap
和leaks
)進(jìn)行探索僧诚。有關(guān)命令行工具的更多信息,請(qǐng)參閱WWDC 2018 session 416
秀菱,iOS Memory Deep Dive振诬。
Profile Your App Using the Allocations Instrument
Allocations
工具跟蹤所有堆和匿名虛擬內(nèi)存(VM)
分配的大小和數(shù)量蹭睡,并按類別組織它們衍菱。使用Allocations
工具的時(shí)間線來(lái)調(diào)查您的應(yīng)用分配的內(nèi)存總量在您使用應(yīng)用界面時(shí)如何增加和減少。使用統(tǒng)計(jì)信息視圖(statistics view)
查看正在進(jìn)行的分配類別肩豁,在每個(gè)類別中進(jìn)行的分配數(shù)量以及這些分配的大小脊串。單擊類別名稱旁邊的箭頭,以查看在該類別中進(jìn)行的各個(gè)分配清钥,以及分配內(nèi)存的時(shí)間和負(fù)責(zé)分配的代碼琼锋。
Allocations
工具中的Generations
視圖對(duì)于調(diào)查應(yīng)用程序特定功能的內(nèi)存使用情況很有用。啟動(dòng)您的應(yīng)用程序祟昭,并準(zhǔn)備使用正在研究的功能-例如缕坎,導(dǎo)航至具有特定控件的視圖。接下來(lái)篡悟,單擊Allocations
工具中的Mark Generation
按鈕谜叹。在您的應(yīng)用程序中激活該功能,然后再次單擊Mark Generation
搬葬。Instruments
按代組織內(nèi)存分配荷腊,在您單擊Mark Generation
時(shí)分開(kāi)。您可以隔離使用功能期間發(fā)生的內(nèi)存分配急凰。并非這段時(shí)間內(nèi)記錄的所有分配都與您正在研究的功能相關(guān)聯(lián)女仰,但是generation marks
之間未發(fā)生的許多無(wú)關(guān)分配已從考慮中刪除。
See Also
1. Related Documentation
后記
本篇主要講述了
Gathering Information About Memory Use
,感興趣的給個(gè)贊或者關(guān)注~~~