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