您好,登錄后才能下訂單哦!
工具
工具主要有以下3種:
基本工具,不需要Xcode instruments。
內(nèi)存工具,驗(yàn)證內(nèi)存使用的正確性和測試內(nèi)存使用的效率。
性能工具,測試你程序的每一個部分運(yùn)行有多快以及精確的定位任何瓶頸。
基本工具
在本部分,我討論的是在代碼塊中使用日志作為一個基本的工具來測試運(yùn)行的時間。
用日志記錄運(yùn)行的時間
基本工具其中之一就是用日志來記錄代碼塊開始和結(jié)束的時間。通常,記日志是用NSLog來實(shí)現(xiàn)的。使用這個基本的工具,開發(fā)者能夠檢測每行代碼或代碼塊運(yùn)行的時間。
例如,運(yùn)行下面的代碼塊
NSDate *date1 = [NSDate date];
for (int i = 0; i < 1000; i++) {
// Do calculation here
}
NSDate *date2 = [NSDate date];
NSLog (@”time: %f”, [date2 timeIntervalSinceDate:date1]);
返回的結(jié)果:
time:0.0123(秒為單位)
優(yōu)點(diǎn):
簡單直接。
你可以測試每一行代碼或每一個代碼塊的性能
缺點(diǎn):
你無法測試UI性能(例如,渲染UI線程的時間)。
可能會過度優(yōu)化(為了一點(diǎn)點(diǎn)的優(yōu)化,而花費(fèi)太多時間再一個特定的代碼塊中)。
在模擬器上運(yùn)行通常比較快,在這個比較快的級別上,NSLog不能幫助你區(qū)分運(yùn)行時性能的不同。盡管NSLog在真機(jī)上運(yùn)行比較慢,但是它能夠幫你檢測到運(yùn)行時性能的不同。
使用時機(jī):
當(dāng)你需要一個馬上就可以用的工具來測試,而沒有太多的準(zhǔn)備。
當(dāng)你需要一個工具能夠快速的返回結(jié)果。
當(dāng)你需要一個獨(dú)立的小代碼塊來驗(yàn)證預(yù)期的性能。
內(nèi)存工具
關(guān)于內(nèi)存的問題,你只有一個主要要關(guān)注的方面:高內(nèi)存使用。在舊的代碼中有兩個要關(guān)注的:內(nèi)存泄露和內(nèi)存回收。對于新的項(xiàng)目,你可以直接使用新的自動引用計數(shù)(ARC)。對于舊的項(xiàng)目,你可以使用控制工具對他們進(jìn)行轉(zhuǎn)換。
但是,不是每一個項(xiàng)目都是可以轉(zhuǎn)的,有很多問題和內(nèi)存管理策略阻止你進(jìn)行轉(zhuǎn)換。如果嘗試遵從新的管理策略可能會導(dǎo)致更多的麻煩。因此,我主要討論對象分配的內(nèi)存工具,簡單的介紹內(nèi)存泄露和內(nèi)存回收的工具。
注意:我這里介紹的所有內(nèi)存工具都可以運(yùn)行在模擬器上。使用模擬器的好處是它運(yùn)行比較快,安裝app也比較迅速。但是,要小心!我強(qiáng)烈建議你同樣要在真機(jī)上測試你的app,因?yàn)槟M器和真機(jī)是不同的。他們編譯不同,架構(gòu)也不同。 |
內(nèi)存分配
內(nèi)存分配能夠幫助你理解你到底分配了多少對象。這意味著在內(nèi)存中分配和保持了很多對象。這些對象沒有釋放,因?yàn)樗麄冋谑褂谩?/p>
Allocation
選擇 Product -> Profile 然后在打開的窗口(如圖 2-1)中選擇 Allocations
在選擇Allocations instrument之后,你會看到一個Allocation 面板,向你展示了所有必要的信息,如圖2-2 。
在Allocations 面板(圖2-2)顯示了“created and still living”jobs,這樣就能夠什么對象還在內(nèi)存中,以及什么對象消耗了大部分的內(nèi)存。如果你從iOS環(huán)境中收到內(nèi)存警告,例如“Received memory warning. Level =1 ”,你應(yīng)該使用這個工具。
這些細(xì)節(jié)想你展示了何時,哪一行代碼,哪一個類負(fù)責(zé)創(chuàng)建和處理對象。有了這些信息,你能非常簡單的處理內(nèi)存問題。這是一個非常好的工具來跟蹤緩存算法和方法(查看第4張了解更多細(xì)節(jié))。
圖2-3和2-4顯示了更多細(xì)節(jié),什么對象還存活著,什么對象消耗了你應(yīng)用的大部分內(nèi)存。在圖2-3中,你可以看到在你的應(yīng)用中,對象創(chuàng)建和存活的細(xì)節(jié)列表。
在圖2-4中,你可以看到創(chuàng)建這些對象調(diào)用的方法。
優(yōu)點(diǎn):
在應(yīng)用消耗大部分內(nèi)存時,你能夠正確的提供很多細(xì)節(jié)。
它同樣可以給你提供應(yīng)用中對象生命周期的一個概要。
缺點(diǎn):
結(jié)果依賴于開發(fā)者如何運(yùn)行app。它需要一個好的測試用例來盡可能多的覆蓋各種可能性。
它可能會花很多時間和精力來創(chuàng)建一個好的測試用例來幫助開發(fā)者找出應(yīng)用消耗大部分內(nèi)存的時間和地方。
你需要在真機(jī)上測試,這樣你才能收到內(nèi)存警告的信息。模擬器幾乎不會收到內(nèi)存警告信息。這是因?yàn)槟M器會使用電腦的RAM,而電腦一般會有2-4GB的RAM,但是你的設(shè)備就很少了。
使用時機(jī)
如果你在真機(jī)上測試收到了內(nèi)存警告消息,這應(yīng)該是你第一個應(yīng)該使用的工具。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。