溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用工具檢測你的app:模擬器和真機(jī)測試 之二

發(fā)布時間:2020-07-25 03:02:39 來源:網(wǎng)絡(luò) 閱讀:2156 作者:iKingLai 欄目:移動開發(fā)

工具


工具主要有以下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)行下面的代碼塊


  1. NSDate *date1 = [NSDate date];

  2. for (int i = 0; i < 1000; i++) {

       // Do calculation here

  3. }

    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


使用工具檢測你的app:模擬器和真機(jī)測試 之二


在選擇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é))。


使用工具檢測你的app:模擬器和真機(jī)測試 之二


圖2-3和2-4顯示了更多細(xì)節(jié),什么對象還存活著,什么對象消耗了你應(yīng)用的大部分內(nèi)存。在圖2-3中,你可以看到在你的應(yīng)用中,對象創(chuàng)建和存活的細(xì)節(jié)列表。


使用工具檢測你的app:模擬器和真機(jī)測試 之二

在圖2-4中,你可以看到創(chuàng)建這些對象調(diào)用的方法。


使用工具檢測你的app:模擬器和真機(jī)測試 之二


優(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)該使用的工具。

向AI問一下細(xì)節(jié)

免責(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)容。

AI