參考鏈接:http://www.cnblogs.com/ym123/p/4324335.html
啟動Time Profile:Xcode ——> Product ——> Profile ——> Time Profile
使用Time Profiler調(diào)試程序奉狈,能獲取到整個應(yīng)用程序運行中所消耗的時間分布和百分比
使用Time Profile前有兩點需要注意的地方:
1、一定要使用真機調(diào)試
在開始進行應(yīng)用程序性能分析的時候焙格,一定要使用真機绘趋。因為模擬器運行在Mac上犀忱,然而Mac上的CPU往往比iOS設(shè)備要快得院。相反左电,Mac上的GPU和iOS設(shè)備的完全不一樣,模擬器不得已要在軟件層面(CPU)模擬設(shè)備的GPU咽白,這意味著GPU相關(guān)的操作在模擬器上運行的更慢啤握,尤其是使用CAEAGLLayer來寫一些OpenGL的代碼時候,這就導(dǎo)致模擬器性能數(shù)據(jù)和用戶真機使用性能數(shù)據(jù)相去甚遠
2局扶、應(yīng)用程序一定要使用發(fā)布配置
在發(fā)布環(huán)境打包的時候恨统,編譯器會引入一系列提高性能的優(yōu)化,例如去掉調(diào)試符號或者移除并重新組織代碼三妈。另iOS引入一種"Watch Dog"[看門狗]機制,不同的場景下莫绣,“看門狗”會監(jiān)測應(yīng)用的性能畴蒲,如果超出了該場景所規(guī)定的運行時間,“看門狗”就會強制終結(jié)這個應(yīng)用的進程对室。開發(fā)者可以crashlog看到對應(yīng)的日志模燥,但Xcode在調(diào)試配置下會禁用"Watch Dog"
啟動后如圖
點擊左上角紅色按鈕,開始調(diào)試
調(diào)試時注意右下方選項
Separate by Thread:每個線程應(yīng)該分開考慮掩宜,只有這樣你才能揪出那些大量占用CPU的"重"線程
Invert Call Tree:從上倒下跟蹤堆棧蔫骂,這意味著你看到的表中的方法,將已從第0幀開始取樣牺汤,這通常你是想要的辽旋,只有這樣你才能看到CPU中話費時間最深的方法,也就是說FuncA{FunB{FunC}} 勾選此項后堆棧以C->B-A 把調(diào)用層級最深的C顯示在最外面
Hide System Libraries:勾選此項你會顯示你app的代碼檐迟,這是非常有用的补胚。因為通常你只關(guān)心cpu花在你自己寫的代碼上的時間 而不是花在系統(tǒng)代碼上的時間
Flatten Recursion:遞歸函數(shù), 每個堆棧跟蹤一個條目
Top Functions:一個函數(shù)花費的時間直接在該函數(shù)中的總和,以及在函數(shù)調(diào)用該函數(shù)所花費的時間的總時間追迟。因此溶其,如果函數(shù)A調(diào)用B,那么A的時間報告在A花費的時間加上B花費的時間敦间,這非常有用瓶逃,因為它可以讓你每次下到調(diào)用堆棧時挑最大的時間數(shù)字束铭,歸零在你最耗時的方法
最終調(diào)試界面如圖
雙擊選中行查看代碼
發(fā)現(xiàn)循環(huán)中的UIImage *image = [UIImage imageNamed:imageName];語句的時間消耗最長,度娘之:
UIImage初始化方法有兩種
A:imagedNamed初始化
B:imageWithContentsOfFile初始化
二者不同之處在于厢绝,imageNamed默認加載圖片成功后會內(nèi)存中緩存圖片契沫,這個方法用一個指定的名字在系統(tǒng)緩存中查找并返回一個圖片對象,如果緩存中沒有找到相應(yīng)的圖片對象代芜,則從指定地方加載圖片然后緩存對象埠褪,并返回這個圖片對象
而imageWithContentsOfFile則僅只加載圖片,不緩存
大量使用imageNamed方式會在不需要緩存的地方額外增加開銷CPU的時間來做這件事挤庇,當應(yīng)用程序需要加載一張比較大的圖片并且使用一次性钞速,那么其實是沒有必要去緩存這個圖片的,用imageWithContentsOfFile是最為經(jīng)濟的方式嫡秕,這樣不會因為UIImage元素較多情況下渴语,CPU會被逐個分散在不必要緩存上浪費過多時間
使用場景需要編程時,應(yīng)該根據(jù)實際應(yīng)用場景加以區(qū)分昆咽,UIimage雖小驾凶,但使用元素較多問題會有所凸顯
文/戴尼瑪(簡書作者)
原文鏈接:http://www.reibang.com/p/c6961c355ae8
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)掷酗,并標注“簡書作者”调违。