iOS程式碼效能優化
程式碼效能優化:
入門級(這是些你一定會經常用在你app開發中的建議)
1. 用ARC管理記憶體
專案中目前正在使用
2. 在正確的地方使用reuseIdentifier
UITableView和UICollectionView使用時要注意單元格重用
3. 儘可能使Views不透明
將檢視的opaque屬性為YES,目前專案中設定沒有問題。
4. 避免龐大的XIB
Storyboards在單個人開發非常便利,但是不適合我們專案,否則所有時間都用來解決SVN衝突了。
我們專案中借鑑:一些簡單介面可以不使用XIB,例如:一個XIB中只有一個UITableView的情景,可以不建立XIB。
5. 不要block主執行緒
目前我們專案中一些複雜的資料處理及計算都直接處理,要多多使用如下模式:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// switch to a background thread and perform your expensive operation
dispatch_async(dispatch_get_main_queue(), ^{
// switch back to the main thread to update your UI
});
});
- 在Image Views中調整圖片大小
使用合適大小的圖片資源 - 選擇正確的Collection
- 開啟gzip壓縮
使用gzip來減少與伺服器間資料量,可以做技術儲備
中級(這些是你可能在一些相對複雜情況下可能用到的) - 重用和延遲載入Views
- Cache, Cache, 還是Cache!
- 權衡渲染方法
- 處理記憶體警告
目前專案中幾乎沒有針對記憶體警告的處理,原因是目前暫時還沒有發現因為記憶體警告而導致的Crash。要引起重視。記憶體警告時解決方案:將快取刪掉,同時要注意將上次選擇的狀態儲存在本地 - 重用大開銷的物件
理論沒有問題。但是NSDateFormatter示例不合適,因為NSDateFormatter不是執行緒安全的,多個執行緒同時訪問NSDateFormatter會Crash,我個人建議特殊情況特殊處理,對於NSDateFormatter這種不是執行緒安全的,應該隨時使用隨時建立。 - 使用Sprite Sheets
目前專案沒有涉及遊戲方面。 - 避免反覆處理資料
從伺服器拿到資料以後,一次性處理好,然後展示。最好不要在展示的時候才處理資料。 - 選擇正確的資料格式
目前我們專案中使用Json解析,沒有問題。 - 正確地設定Background Images
使用UIColor的colorWithPatternImage也可以設定背景圖片,但是一定注意,colorWithPatternImage只使用一種情況:用小圖平鋪來建立背景,否則記憶體會急劇增大 - 減少使用Web特性
專案中暫不涉及 - 設定Shadow Path
設定陰影一定要加shadowPath,避免卡成狗
view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];
- 優化你的Table View
• 正確使用reuseIdentifier
來重用cells
• 儘量使所有的view opaque,包括cell自身
• 避免漸變,圖片縮放,後臺選人
• 快取行高
• 如果cell內現實的內容來自web,使用非同步載入,快取請求結果
• 使用shadowPath
來畫陰影
• 減少subviews的數量
• 儘量不使用cellForRowAtIndexPath:
,如果你需要用到它,只用一次然後快取結果
• 使用正確的資料結構來儲存資料
• 使用rowHeight
,sectionFooterHeight
和sectionHeaderHeight
來設定固定的高,不要請求delegate
額,說的非常正確,我不知道說什麼好。 - 選擇正確的資料儲存選項
進階級(這些建議只應該在你確信他們可以解決問題和得心應手的情況下采用) - 加速啟動時間
程式啟動時,除了介面上的操作,其他儘可能放在背景執行緒做。
“避免過於龐大的XIB,因為他們是在主執行緒上載入的。所以儘量使用沒有這個問題的Storyboards吧!” 這句雖然說的對,但是不適合我們專案 - 使用Autorelease Pool
在迴圈中,如果有很多autorelease物件,使用如下方案。注意@autoreleasepool要放在迴圈內部。
NSArray *urls = ;
for (NSURL *url in urls) {
@autoreleasepool {
NSError *error;
NSString *fileContents = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding error:&error];
/* Process the string, creating and autoreleasing more objects. */
}
}
- 選擇是否快取圖片
一次性大圖片使用imageWithContentsOfFile載入,表格中或者反覆使用的圖片可以使用imageNamed。 - 儘量避免日期格式轉換
NSDateFormatter仍然是坑
相關文章
- iOS效能優化iOS優化
- Android效能優化——程式碼優化(一)Android優化
- 優化 iOS 程式效能的 25 個方法優化iOS
- IOS效能優化篇iOS優化
- iOS 效能優化套路iOS優化
- iOS 效能篇一一UITableView效能優化iOSUIView優化
- 前端效能優化—js程式碼打包前端優化JS
- 祖傳程式碼如何優化效能?優化
- 淺談JavaScript程式碼效能優化JavaScript優化
- Python 程式碼效能優化技巧Python優化
- .NET(C#)程式碼效能優化C#優化
- JavaScript 程式碼效能優化總結JavaScript優化
- iOS 效能優化備忘iOS優化
- iOS 圖形效能優化iOS優化
- ios效能優化相關iOS優化
- iOS 效能優化的探索iOS優化
- iOS 效能優化總結iOS優化
- iOS 頁面效能優化iOS優化
- iOS圖層效能優化iOS優化
- iOS中UITableView效能優化iOSUIView優化
- C# 程式碼效能優化舉例C#優化
- Python 程式碼的效能優化之道Python優化
- js程式碼優化 提高執行效能JS優化
- 淺談JavaScript程式碼效能優化2JavaScript優化
- iOS效能優化 - APP啟動時間優化iOS優化APP
- iOS 介面效能優化淺析iOS優化
- 【iOS 印象】效能優化梳理(Swift)iOS優化Swift
- iOS-效能優化深入探究iOS優化
- Android效能優化篇:從程式碼角度進行優化Android優化
- iOS應用程式中UITableView的效能優化(最全面)iOSUIView優化
- 如何優化程式效能優化
- iOS效能優化 - 網路圖片載入優化iOS優化
- javascript程式碼效能優化簡單介紹JavaScript優化
- 35 個 Java 程式碼效能優化總結Java優化
- iOS效能優化過程淺析iOS優化
- 高階iOS應用效能優化iOS優化
- 【AIX 學習】效能優化--iostatAI優化iOS
- iOS效能優化系列篇之“列表流暢度優化”iOS優化