iOS滑動優化
iOS優化(三)沒錯我還是滑動優化2017-07-05 11:58iOS 近期把滑動優化的一些經驗整理了一下,在公司做了一次技術分享,和我之前的文章有一小部分重疊。現摘要如下,希望大家不吝賜教,共同討論進步。
一。滑動優化的玄學
為什么說是玄學呢,因為大部分情況下的APP,用不到這些優化的點,過早的優化是惡魔,當真正出現性能問題的時候,再考慮這些方面的優化。
1.多個透明元素重疊顯示的性能問題。
解決方案:合并成一張圖顯示
原理:CPU方面,減少了UIKit的創建消耗,GPU方面,避免了合成渲染產生的消耗。
AsyncDisplayKit(現在叫Texture),針對多個透明元素的重疊,預合并無點擊響應,不改變動畫的圖層。
Texture的保持流暢的原理:UIKit不是線程安全的,所以必須在主線程改動。Texture利用中間變量存儲改動,保證線程安全,在合適的機會將并發操作同步到主線程。
暫時不用Texture的原因:需要用Texture Node Container替換UIKit元素,成本較大。
2.靜態cell、多圖待加載的優化
解決方案:合并成一張圖顯示;
原理:提升I/O速度,一個大文件的讀取速度,通常比多個小文件要快。
3.展示適合界面尺寸圖片,不進行拉伸縮放。
解決方案:從服務器拉取合適尺寸的圖片(例如七牛的服務就帶裁剪/壓縮參數);
原理:過大圖片對內存消耗巨大(圖片占用內存 = 圖像高×圖像寬×像素位數);不符合UIImageView尺寸的圖片,進行重新縮減/放大尺寸的消耗是非常巨大的。
4.imageNamed和imageWithContentsOfFile
這個知道的人比較多,因為緩存圖片的消耗通常是肉眼可見的多。
常用的元素例如icon之類的,采用imageNamed:,系統會有緩存。
如果是較大或者不常用的圖片資源,采用imageWithContentsOfFile:。
5.減少autolayout的使用
解決方案:頁面元素多的時候,減少autolayout布局,采用frame。
原理:元素多時,autolayout的消耗非常驚人(http://pilky.me/36/) ,之前看過搜狗的iOS分享,搜狗輸入法鍵盤彈出狂卡即是此原因;
6.獲取文件大小
解決方案:不要使用NSFileManager,用C的stat來獲取文件信息。
實例:獲取一個目錄下所有文件大小,進行多次遞歸計算,stat幾乎瞬間完成,NSFileManager耗時較長。
解決方案:。緩存NSDateFormatter結果,不多次創建,及時釋放。
做過類似日歷的同學應該都懂??
8.圖片解碼:
解決方案:CALayer 被提交到 GPU 前,CGImage 中的數據才會得到解碼,GPU執行,卡主線程。常見的做法是在后臺線程先把圖片繪制到 CGBitmapContext 中,然后從 Bitmap 直接創建圖片。
SDWebImage/YYImage等圖片庫都是這么做的,有興趣的同學可以去看下源碼。如果你是自己做圖片下載,就要考慮到相關優化。
二.cell高度預計算/緩存
解決方案:。緩存NSDateFormatter結果,不多次創建,及時釋放。
做過類似日歷的同學應該都懂??
一般情況下,不要用estimatedRowHeight,不然容易鬼畜;
systemLayoutSizeFittingSize:這個方法,就是大部分cell布局庫采用的方法,只要從上至下布局全部生效,就能計算高度,不要多次調用;
由于UITableView繪制過程中多次調用繪制,所以緩存高度計算結果,可以有效的增加滑動流暢度;
當cell高度改變,記得及時替換緩存;
三。離屏渲染
觸發條件:CALayer 的 border、圓角、陰影、遮罩(mask),CASharpLayer 的矢量圖形顯示。
主要問題:GPU占滿,CPU空閑
解決方法:
1.開啟CALayer.shouldRasterize ,轉嫁到CPU上;
2.粗暴畫圖/截圖實現border和圓角;
3.砍死設計師。
最近拖延癥有點厲害,這篇文章想寫了很久都沒寫出來,我先摘要一部分思路出來。
曾經的需求是這樣的:
?
注意需求的圈和頭像之間是有空隙的
初期方案是圖片下載完成后,裁成圓形,然后外面用貝塞爾畫一個圈,根據不同的UI緩存不同多個帶圈兒的圖;
然而。。.神奇的產品第二版給我整出了無數個各種不同大小、間距、透明度的圈。這樣就意味著我得緩存無數帶著各色圈兒的圖。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
iOS滑動優化下載
相關電子資料下載
- iOS17.1可能明天發布,iOS17.1主要修復哪些問題? 377
- 華為全新鴻蒙蓄勢待發 僅支持鴻蒙內核和鴻蒙系統應用 719
- 蘋果手機系統iOS 17遭用戶質疑 731
- iPhone12輻射超標?蘋果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標明年智能手機出貨7000萬部;消息稱 MiOS 僅限國內,小米 28208
- 蘋果推送iOS17.0.3,解決iPhone15Pro系列存在機身過熱 216
- Testin云測兼容和真機服務平臺中上線iPhone 15系列手機 208
- 利爾達推出搭載HooRiiOS的Matter模組 145
- 運放參數解析:輸入偏置電流(Ibias)和失調電流(Ios) 128
- 昆侖太科發布支持國產飛騰騰銳D2000芯片的開源BIOS固件版本 448