版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2021.05.13 星期四 |
前言
MetricKit由iOS13系統(tǒng)進引入,用來匯總和分析有關(guān)異常和崩潰診斷以及電源和性能指標(biāo)的每個設(shè)備的報告。下面我們就一起來看下這個框架。感興趣的可以看下面幾篇文章。
1. MetricKit框架詳細(xì)解析(一) —— 基本概覽(一)
2. MetricKit框架詳細(xì)解析(二) —— Improving Your App's Performance(一)
3. MetricKit框架詳細(xì)解析(三) —— Reducing Your App's Memory Use(一)
Overview
通過評估和分析應(yīng)用程序來確定內(nèi)存使用效率低下的問題。
Xcode和Instruments提供了多種工具來觀察和探索應(yīng)用程序中的內(nèi)存使用情況。
Review the Memory Report
當(dāng)您的應(yīng)用程序在Xcode中運行時,可從Xcode的Debug導(dǎo)航器中獲得的內(nèi)存報告顯示該應(yīng)用程序當(dāng)前的內(nèi)存使用情況以及看到的最大值。 內(nèi)存規(guī)的黃色區(qū)域表示內(nèi)存使用量足夠高,可以觸發(fā)警告。 如果該應(yīng)用的內(nèi)存使用量進入紅色區(qū)域,則該應(yīng)用有被iOS終止的風(fēng)險。

注意:如果
iOS由于使用過多內(nèi)存而反復(fù)終止您的應(yīng)用程序,則可以在模擬器中調(diào)查其行為,然后在模擬器中繼續(xù)運行。 在模擬器中運行應(yīng)用程序時,內(nèi)存量表始終停留在綠色(安全)區(qū)域,因為macOS不會發(fā)出內(nèi)存警告或內(nèi)存不足終止。 此行為在診斷與過多內(nèi)存使用相關(guān)的問題方面具有優(yōu)勢。 但是請記住,模擬器中儀表綠色區(qū)域內(nèi)的內(nèi)存使用并不一定意味著您的應(yīng)用程序的內(nèi)存使用處于安全范圍內(nèi)。
Inspect the Debug Memory Graph
您可以通過在工作區(qū)窗口底部的Xcode調(diào)試區(qū)域中單擊Debug Memory Graph按鈕來生成應(yīng)用程序中對象和分配的內(nèi)存圖。

內(nèi)存圖顯示了您的應(yīng)用程序正在使用的內(nèi)存區(qū)域以及每個區(qū)域的大小。 圖中的節(jié)點表示對象,堆分配或內(nèi)存映射文件。 節(jié)點之間的連接(如箭頭所示)顯示了一個內(nèi)存區(qū)域引用另一個內(nèi)存區(qū)域的位置。

內(nèi)存圖顯示您的應(yīng)用程序在哪里使用內(nèi)存,以及這些使用之間的關(guān)系。您可以使用allocation stack traces來擴充內(nèi)存圖表,以便每個區(qū)域都與在分配該區(qū)域的點記錄的調(diào)用堆棧跟蹤相關(guān)聯(lián)。
要打開分配堆棧跟蹤(allocation stack traces),請在scheme’s Run設(shè)置的Diagnostics區(qū)域中選中Malloc Stack框。啟用分配堆棧跟蹤后,內(nèi)存圖中節(jié)點的檢查器將顯示分配該節(jié)點時記錄的堆棧跟蹤。使用此信息將內(nèi)存圖中的內(nèi)存分配與應(yīng)用程序源代碼中的函數(shù)和方法相關(guān)聯(lián)。
要從Xcode導(dǎo)出內(nèi)存圖,請選擇File > Export Memory Graph。您可以與團隊成員共享導(dǎo)出的內(nèi)存圖,也可以使用命令行工具(包括vmmap和leaks)進行探索。有關(guān)命令行工具的更多信息,請參閱WWDC 2018 session 416,iOS Memory Deep Dive。
Profile Your App Using the Allocations Instrument
Allocations工具跟蹤所有堆和匿名虛擬內(nèi)存(VM)分配的大小和數(shù)量,并按類別組織它們。使用Allocations工具的時間線來調(diào)查您的應(yīng)用分配的內(nèi)存總量在您使用應(yīng)用界面時如何增加和減少。使用統(tǒng)計信息視圖(statistics view)查看正在進行的分配類別,在每個類別中進行的分配數(shù)量以及這些分配的大小。單擊類別名稱旁邊的箭頭,以查看在該類別中進行的各個分配,以及分配內(nèi)存的時間和負(fù)責(zé)分配的代碼。
Allocations工具中的Generations視圖對于調(diào)查應(yīng)用程序特定功能的內(nèi)存使用情況很有用。啟動您的應(yīng)用程序,并準(zhǔn)備使用正在研究的功能-例如,導(dǎo)航至具有特定控件的視圖。接下來,單擊Allocations工具中的Mark Generation按鈕。在您的應(yīng)用程序中激活該功能,然后再次單擊Mark Generation。Instruments按代組織內(nèi)存分配,在您單擊Mark Generation時分開。您可以隔離使用功能期間發(fā)生的內(nèi)存分配。并非這段時間內(nèi)記錄的所有分配都與您正在研究的功能相關(guān)聯(lián),但是generation marks之間未發(fā)生的許多無關(guān)分配已從考慮中刪除。
See Also
1. Related Documentation
后記
本篇主要講述了
Gathering Information About Memory Use,感興趣的給個贊或者關(guān)注~~~
