工具算法
工具主要有如下3種:緩存
基本工具,不須要Xcode instruments。架構
內存工具,驗證內存使用的正確性和測試內存使用的效率。app
性能工具,測試你程序的每個部分運行有多快以及精確的定位任何瓶頸。ide
基本工具工具
在本部分,我討論的是在代碼塊中使用日誌做爲一個基本的工具來測試運行的時間。性能
用日誌記錄運行的時間測試
基本工具其中之一就是用日誌來記錄代碼塊開始和結束的時間。一般,記日誌是用NSLog來實現的。使用這個基本的工具,開發者可以檢測每行代碼或代碼塊運行的時間。優化
例如,運行下面的代碼塊spa
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,可是你的設備就不多了。
使用時機
若是你在真機上測試收到了內存警告消息,這應該是你第一個應該使用的工具。