使用Instruments的 Allocations (al??ke??(?)n,分配)工具
Allocations 分配工具。它能給出你所有創(chuàng)建和存儲(chǔ)它們的內(nèi)存的詳細(xì)信息,它也顯示你保留了每個(gè)對(duì)象的計(jì)數(shù)。
我們經(jīng)常需要從服務(wù)器下載大量圖片,特別是開發(fā)照片類的應(yīng)用。但往往稍不注意,內(nèi)存使用就會(huì)暴增,所以得保證把這些圖片緩存下來以便重復(fù)使用。重新載入圖片時(shí),內(nèi)存都會(huì)出現(xiàn)使用峰值。應(yīng)用先分配大量內(nèi)存來替換原有圖片,然后再釋放掉這部分內(nèi)存,可想而知這樣的操作效率高不了,而且如果要下載更大的文件,呃,局面大概會(huì)失控吧。用異步方式來加載圖片,這樣用不著等到所有圖片下載完才能在界面中顯示。大多數(shù)圖像緩存庫都會(huì)把加載工作放到后臺(tái),以避免延長主線程的響應(yīng)周期。
言歸正傳 步驟:
1.Xcode和選擇Product->Profile。2.然后,選擇Allocations啟動(dòng)如下圖十二,圖十三,圖十四



這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)兩個(gè)曲目。一個(gè)叫(分配)Allocations,以及一個(gè)被稱為VM Tracker(?trak?,追蹤者)(虛擬機(jī)跟蹤);虛擬機(jī)跟蹤也是非常有用的,但更復(fù)雜一點(diǎn)。
實(shí)際上,我們用Allocations工具也可以檢測(cè)僵尸對(duì)象,如 圖十五 所示。

我們?cè)趯傩悦姘逯泄催x”Enable NSZombie detection”,其效果和單獨(dú)使用Zombies工具是一樣的。
Instruments訪問多次運(yùn)行的跟蹤數(shù)據(jù)
Instruments在一次運(yùn)行期間可以記錄App的多次運(yùn)行記錄。以Allocations為例,開啟Instruments后,每結(jié)束一次Allocations分析,這條分析就會(huì)被記錄下來,下次再開啟分析時(shí),我們?nèi)匀豢梢钥吹角耙淮畏治龅男畔?,如圖十六所示。

通過這些記錄,我們可以對(duì)比每次分析的差別。這樣我們就可以邊修改程序,邊用Instruments來對(duì)其進(jìn)行分析,并通過這種對(duì)比來觀察修改的效果 >當(dāng)然,關(guān)閉Instruments時(shí),如果不保存信息,這些記錄會(huì)被清理掉。
說到內(nèi)存問題,我們更多的會(huì)想到內(nèi)存泄露和野指針,而實(shí)際上還有一類看似不是問題的內(nèi)存問題:Abandoned Memory(被遺棄的內(nèi)存)。這類內(nèi)存可能由于某些原因被分配,但并非一直需要,只是可能在程序運(yùn)行期的某個(gè)時(shí)間需要,如內(nèi)存緩存的圖片,還有一個(gè)比較普遍的東西–單例。我們可能會(huì)為某個(gè)模塊創(chuàng)建一個(gè)單例對(duì)象來維護(hù)這個(gè)模塊所需要的數(shù)據(jù),但在退出模塊后,這個(gè)單例對(duì)象依然存在。與內(nèi)存泄露不同,這些對(duì)象從技術(shù)上講依然是有效的。但實(shí)際上可能在程序后續(xù)的運(yùn)行中不會(huì)再被使用。使用Instruments定位內(nèi)存問題,內(nèi)存泄露和野指針的定位相對(duì)來說容易些,內(nèi)存泄露使用Leaks,野指針則可以使用僵尸對(duì)象。而Abandoned Memory則相對(duì)不那么明顯。Abandoned Memory可以采用所謂的Generational Analysis方法來分析,即反復(fù)進(jìn)入退出某一場(chǎng)景,查看內(nèi)存的分配與釋放情況,以定位哪些對(duì)象是屬于Abandoned Memory的范疇。在Allocations工具中,有專門的Generational Analysis設(shè)置,如下圖十七所示

我們可以在程序運(yùn)行時(shí),在進(jìn)入某個(gè)模塊前標(biāo)記一個(gè)Generation,這樣會(huì)生成一個(gè)快照。然后進(jìn)入、退出,再標(biāo)記一個(gè)Generation,如下圖十八所示。

在詳情面板中我們可以看到兩個(gè)Generation間內(nèi)存的增長情況,其中就可能存在潛在的被遺棄的對(duì)象,如下圖十九所示。

定位到問題,即可做相應(yīng)的優(yōu)化。原文鏈接:http://www.itdecent.cn/p/c558806983cd
使用instrument測(cè)試內(nèi)存泄露 工具 Allocations 測(cè)試是否內(nèi)存泄露 使用標(biāo)記,可以更省事省力的測(cè)試頁面是否有內(nèi)存泄露
1、設(shè)置Generations

2、選擇mark generation

3、使用方法 在進(jìn)入測(cè)試頁面之前,mark一下----->進(jìn)入頁面----->退出----->mark------>進(jìn)入------->退出------->mark------>進(jìn)入如此往復(fù)5、6次,就可以看到如下結(jié)果

這種情況下是內(nèi)存有泄露,看到每次的增量都是好幾百K或者上M的,都是屬于內(nèi)存有泄露的,這時(shí)候就需要檢測(cè)下代碼一般情況下,100K以下都屬于正常范圍,growth表示距離你上次mark的增量