[深入淺出cocoa]ios程式效能優化
羅朝輝 (
ios應用是非常注重使用者體驗的,不光是要求介面設計合理美觀,也要求各種ui的反應靈敏,我相信大家對那種一拖就卡卡卡的 tableview 應用沒什麼好印象。還記得12306麼,那個速度,相信大家都受不了。為了提高 ios 的執行速度,下面我將拋磚引玉介紹一些我實踐過的用來提供ios程式執行效率的方法,與大家分享,希望能得到更多的反饋和建議。
最簡單的工具就是 nsdate,但精度不是太好。
nsdate* tmpstartdata = [[nsdate date] retain];//you code here...
double deltatime = [[nsdate date] timeintervalsincedate:tmpstartdata];
nslog(@"
>>>>>>>>>>cost time = %f
", deltatime);
#import2,善用效能分析工具。//for mach_absolute_time() and friends
cgfloat bnrtimeblock (void (^block)(void))
xcode 自帶了很多強大的分析工具,包括靜態 analyze 工具,以及執行時 profile 工具。
3,關於
優先使用[uiimage imagenamed:@""];
盡量不要使用全屏大小的背景;使用 gradient 來取代硬編碼的 gradient;gradient 應當盡可能窄,然後將之拉伸運用到實際場合中去。
4,對於結構複雜的 view,使用 drawrect 自繪而不是從 nib 中載入。
5,對於 tableview,重用 cell;減少 cell 初始化的工作量,延遲裝載;定製複雜 cell 時,使用 drawrect 自繪;cache 盡可能多的東西,包括 cell 高度;盡可能讓 cell 不透明;避免使用影象特性,比如 gradients。
7,將一些不太重要的任務放在 idle 時執行。
- (void)idlenotificationmethod10,關於後台任務- (void)registerforidlenotification
系統進入 background 之後,一般只有10分鐘的執行時間,因此有很多值得注意的事項:
b) 釋放所有的共享資源,比如
calendar 與 address book。當應用程式進入後台時,如果它還在使用或沒有釋放共享資源,ios會立即kill掉該應用程式。
d) 不要更新ui或者執行大量消耗cpu或電池的**。進入後台之後,不應該執行不必要的任務,不要執行 opengl es 呼叫,應取消 bonjour 相關的服務,正確處理網路鏈結失敗,避免更新 ui,清除所有的警告或其他彈出對話方塊。
e) 保證
後台**的執行工作
正常,注意處理異常
。f) 在後台時正確響應系統變化。
11,如果關鍵**使用 c/c++/asm 效率更高就使用 c/c++/asm。
12,如果乙個方法在乙個迴圈次數非常多的迴圈中使用,在進入迴圈前使用
methodforselector 獲取該方法 imp,然後在迴圈體中直接使用該 imp。
13,關於記憶體釋放
在 didreceivememorywarning 中釋放記憶體,比如cache 的影象,view 等,並記得呼叫 [supper didreceivememorywarning]。清理函式 didreceivememorywarning, viewdidunload 和 dealloc 都是在方法結尾處呼叫 supper 的方法。
避免使用靜態初始化,包括靜態c++物件,載入時會執行的**,如+(void) load{} ,會造成在main函式之前執行額外的**。
16,利用 cache 空間換時間。cache 是一種常見的空間換時間的提供效能的收到,可以用在相當多的場合。
盡量 cache 那些可重複利用的物件,比如 table cell,date/number formatters,正規表示式,sqlite語句等。
17,關於資料庫
快取經常用到的 sqlite 語句;優化資料庫查詢語句,用sqlite3_trace和sqlite3_profile來查詢效能差的語句;如果可能的話,快取查詢結果緩。
在使用 sqlite_prepare會將sql查詢編譯成位元組碼,要使用bind,重用那些已經prepared的語句。
優化程式效能
編寫高效程式需要兩個活動 第一,我們必須選擇一組最好的演算法和資料結構 第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行 的源 這裡,我們主要講述後者。首先,我們討論一下為什麼要編寫高效程式。不難想象,如果本來要用 天執行完的程式,經過優化只需要 天就可執行完,這是一件多麼令人振奮的 事啊。...
優化程式效能
l 消除迴圈的低效率 n 對於迴圈中的過程呼叫盡量移出迴圈外,例如 nfor i 0 i strlen s i strlen 函式為線性增長 在字串長度很大時 很消耗系統資源 n 減少不必要的儲存器引用,將儲存器引用儲存在臨時變數中.l 處理器優化 即充分利用儲存器流水線操作的吞吐量 n 迴圈展開,...
優化程式效能
研究彙編 是理解編譯器以及產生的 會如何執行的最有效的手段之一。編譯器優化 的限制 1 程式設計中存在 儲存器別名使用 的問題。編譯器必須假設不同的指標可能指向儲存器中相同的位置。2 函式呼叫 簡略了。具體看書 基本的編碼原則 效能大幅度提公升 優化程式效能的一些方法 1 將除錯完的程式完成編譯器級...