在本章,你將學到下面這些內容:數組
模擬器和真機測試環境的不一樣。緩存
內存管理是如何影響一個app的性能。性能優化
檢測app的工具和技術包括:網絡
1)基本的測試內存和性能的工具。app
2)測試內存管理方面比較複雜的工具,好比內存泄露和bad access。ide
3)測試計算過程當中性能方面比較複雜的工具,好比電池,文件加載,顯示信息等。工具
如何把你的程序分割成更小的部分,這樣可以更簡單的定位性能的瓶頸。性能
爲了提高性能,你須要很是當心的運行測試來查看問題出如今哪裏。爲了執行一個有用的測試,你須要知道程序或代碼段可能運行慢的緣由。測試
在一開始,你應該注意兩種基本的選擇:模擬器和真機環境,內存優化和性能優化之間的平衡。
優化
首先,你須要知道模擬器和真機環境的不一樣。
模擬器和真機
iPhone應用性能的主要問題是他們運行在一個受限的,處理慢的環境中。iPhone模擬器開發環境比真機環境要更快;事實上,模擬器的環境跟在mac機器上運行它同樣快。
所以,你可能會很是的驚訝,當你的程序在模擬器上運行比較快,而在真機上比較慢。我觀察到不少人抱怨在手機網絡上應用比較慢。在某些狀況下確實如此。可是,在不少狀況下app的性能可能會降低不少,因爲代碼實現自己,而不是網絡的問題。所以,用基本的工具何標準環境仔細的測試你的app,會使得你的app在性能和用戶體驗上更加自信。
爲了演示模擬器和真機的不一樣,我在模擬器和真機上測試了一個程序,結果讓人吃驚。
在模擬器上花了0.5秒完成了主要的計算。
在真機上一樣的計算花了7秒。
程序很簡單:我用兩個數組中進行一個簡單的測試,每一個數組有1000個元素。而後,代碼循環這兩個數組,發現兩個數相同就打印「hello」。在真實環境中,你可能不須要在一個數組中處理1000個元素或你可能不會選擇循環一個數組來找到相同的數。可是,這不是重點。我主要是爲了演示真機比模擬器運行慢的多。
這引出了我在本書中將會屢次提到的一個很是重要的點:你老是須要在模擬器和真機上同時測試。那爲何不僅是在真機上測試呢?由於模擬器有如下優勢:
在模擬器上運行比較快,這意味着能夠減小開發者被耽誤的時間。
比較好測試內存泄露和內存分配問題。
內存和性能
內存和性能是不一樣的。內存一般是指隨機存儲器,它表明了你使用了多少存儲空間,以及你還剩多少存儲空間。性能是指你運行一個指定的功能你的app有多快。
內存可能會對性能產生巨大的影響。當你的設備有更多的RAM和更多的存儲空間,你能夠預加載和緩存更多的數據。相比文件存儲和網絡,RAM訪問是很是快的。經過在RAM上預加載和緩存更多的數據,在不少狀況下你能夠顯著的提高你的程序性能。例如,若是你的app是一個遊戲,須要加載不少圖片,你能夠在必要的時候預加載和顯示他們。從RAM中加載比從文件中加載要快10倍。
可是,內存使用好並不意味着性能就好。有一些app不須要使用不少內存;所以,若是你只是優化內存,性能可能並不會提高。反之就很差了:一個app爲了達到一個比較好的性能而使用了全部的內存,很快app就會把內存耗盡。
所以,你應該老是要對內存和運行時性能進行仔細的測試,確保在內存使用和運行時性能有一個好的權衡。