1. 基礎(chǔ)優(yōu)化
????1. 減少使用xib及storyboard(加載速度慢锄贼;導(dǎo)致APP啟動時間比較耗時,因為在APP啟動main()以前需要加載他們)
2. 懶加載
可以節(jié)省內(nèi)存資源,用到時才去加載所使用對象
3. 單例模式
? ?在項目開發(fā)過程中會用到很多重大開銷對象(比如NSDateFormatter和 NSCalendar)强品,如我們在列表需要計算用戶年齡的時候會經(jīng)常用到NSDateFormatter屈糊,還有一些時間的格式化輸出,或者在網(wǎng)絡(luò)請求的時候需要傳一些時間戳逻锐,所以我們可以把NSDateFormatter放在單利里面,這樣就不用經(jīng)常創(chuàng)建了
4.?離屏渲染
在開發(fā)中晓淀,我們常用有圓角處理盏档、陰影凶掰、遮罩等等蜈亩;先說說圓角優(yōu)化吧,我們一般設(shè)置圓角的方式如下:
view.layer.cornerRadius = 10;
view.layer.maskToBounds = YES;
這樣處理的渲染機制是GPU在當前屏幕緩沖區(qū)外新開辟一個渲染緩沖區(qū)進行工作畅涂,也就是離屏渲染道川,這會給我們帶來額外的性能損耗,如果這樣的圓角操作達到一定數(shù)量冒萄,會觸發(fā)緩沖區(qū)的頻繁合并和上下文的的頻繁切換,性能的代價會宏觀地表現(xiàn)在用戶體驗上——掉幀宦言。
優(yōu)化方案:
a.可以做一個透明的png圖片蓋在上面;
b.使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角蜘澜;
c.使用CAShapeLayer和UIBezierPath設(shè)置圓角响疚;
d.也可以將圖片的處理放在服務(wù)端(比如:七牛云儲存就可以設(shè)置圖片的圓角);
e.盡量把view設(shè)置成不透明的。
5. 列表TableView優(yōu)化
? ? ? ?5.1提前計算好cell的高度,緩存在相應(yīng)的數(shù)據(jù)源模型中
?????????tableView的代理回調(diào)方法中,先調(diào)用的是返回cell高度的方法,然后在返回實例化cell的方法.我們可以在返回cell高度時,提前計算好cell的高度,在獲取數(shù)據(jù)后臺數(shù)據(jù)的時候,把cell高度計算出來,緩存到數(shù)據(jù)源模型中.?在返回cell高度的方法中,直接讀取緩存的高度,而不需要在重新計算了.
????????5.2 盡可能的降低storyboard,xib等使用度
????????通過Interface知道xib或者storyboard本身就是一個xml文件,添加刪除控件必然中間多了一個encode/decode過程,增加了cpu的計算量.并且 還要避免臃腫的 XIB 文件,因為XIB文件在主線程中進行加載布局.當用到一些自定義View或者XIB文件時,XIB的加載會把所有內(nèi)容加載進來,如果XIB里面的一些控件并不會用到,這就可能造成一些資源的消耗浪費装诡。
????????5.3?滑動過程中盡量減少重新布局
????????5.4.少用或不用透明圖層
????????使用不透明視圖。對于不透明的View鸦采,設(shè)置opaque為YES,這樣在繪制該View時渔伯,就不需要考慮被View覆蓋的其他內(nèi)容(盡量設(shè)置Cell的view為opaque,避免GPU對Cell下面的內(nèi)容也進行繪制)
? ??? ??5.5 ?滑動時按需加載對應(yīng)的內(nèi)容
????????如果目標行與當前行相差超過指定行數(shù)选浑,只在目標滾動范圍的前后指定3行加載玄叠。滑動很快時读恃,只加載目標范圍內(nèi)的cell,這樣按需加載(配合SDWebImage)舀寓,極大提高流暢度胆数。
參考資料: