筆記:ios效能優化(未完待續。。。)
阿新 • • 發佈:2019-01-04
最近在網上看了很多的記憶體優化方案,感覺都很 nice ,本文主要是對網上的記憶體優化方案做一下列表式總結,不涉及具體的內容(主要目的就是備忘):
- 用ARC管理記憶體(貌似現在的新專案99%用的都是ARC了)
- 在正確的地方使用 reuseIdentifier
- 儘可能使 View 不透明(View不透明的情況下 GPU在計算顏色的時候只需要計算本圖層的顏色,如果 View 透明,則需要把下 面圖層的顏色計算在內,當然會增加計算的任務量,降低效能了)
- 避免龐大的 XIB(在載入XIB的時候會將所有內容都放到記憶體中,大量 XIB 會導致記憶體的浪費)
- 不要阻塞主執行緒
- 在 imageView 中調整圖片大小(在執行中縮放圖片是很耗費效能的)
- 選擇正確的 Collection (NSArray/NSMutableArray、NSDictionary/NSMutableDictionary、NSSet/NSMutableSet)
- 開啟 gzip 壓縮
- 重用和延遲載入
- 快取需要快取
- 權衡渲染方法
- 處理記憶體警告(當收到記憶體警告的時候清除不是必須的快取以及一些圖片、可以重建的物件等)
- 重用重大開銷(比如 NSDateFormatter 和 NSCalendar。因為他們建立的很慢,可以把它們設定為屬性)
- 避免反覆處理資料(確保服務端和客服端使用相同的資料格式,避免資料轉換帶來的效能損耗)
- 選擇正確的資料格式(XML 和 JSON,JSON 通常來說更小更便於傳輸,而 XML 在處理很大的資料時,不需要像 JSON 那樣等到整個文件下載完成才開始解析,因此在處理很大的資料是會極大的減低記憶體消耗和增加效能)
- 正確設定背景圖片(如果用全畫幅的背景圖,用 imageView,如果是小圖平鋪建立背景用 UIColor 的 colorWithPatternImage方法)
- 減少使用 Web 特性
- 用 shadowPath 新增陰影(view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];)
- 優化TableView
- 正確使用 reuseIdentifier 重用Cell
- 快取行高
- 避免圖片縮放,漸變等
- 使用 shadowPath 來畫陰影
- 減少 subviews 的數量
- 正確的資料結構儲存資料
- 儘量使用 rowHeight,sectionFooterHeight,sectionHeaderHeight 來設定行高,不要請求delegate
- 圖文混排或者 Cell 比較複雜時用 drawRect 繪製
- 在 tableView 快速滑動的時候只加載目標行前後可見範圍內的 Cell
20. 選擇正確的資料儲存選項(NSUserDefaults 儲存小資料,大資料用 SQLite 和 CoreData)
21. 正確選擇載入圖片的方法(imageWithNamed:會把圖片載入的記憶體中,imageWithContentsOfFile:則不會載入到記憶體中)
未完待續。。。