iOS性能優化(精一)

*導讀: *

如果你只會UITabelView的性能優化,請不要說你懂iOS性能優化,下面是我開發這么多年項目中會影響性能的點,我想會對你的項目起到很大的作用

性能優化主要有這些:

1、性能優化:內存優化、速度優化;
2、代碼優化(后續迭代);
3、程序的體積可以優化

一、APP性能優化

1、UITableViewCell的優化
我曾經在博客中有詳細說明 ,這里就不細說了
http://www.ios520junge.com/2014/06/06/由淺入深精講uitabelview/ ?
**
**
**2、網絡請求優化
**

①利用第三方AFN時做網絡隔離,減少對第三方的依賴性;
②UI功能設計時,減少同一時間多次網絡請求的可能性;
③請求數據用JSON,如果用XML代表在網絡數據解析這塊會浪費很多性能,兩者都是常見的數據編碼方式,壓縮模式的效率在很大程度上取決于待壓縮數據,而通常情況下,JSON都是一種最高效的模式

**
**
**3、圖片加載的優化
**

對于這個可以深入研究下SDWebImage框架的底層實現

4、在編碼過程中

①應該做懶加載、單例、封裝處理的有沒有處理,如:多個控制器基礎搭建很像,有沒有抽baseController;
②切圓角圖片時,用的什么技術(直接切圓角和用貝塞爾路徑進行畫是有很大影響的,后續會提供專門的文章進行說明),切完后有沒有做緩存處理

補充:
5、盡量把views設置為完全不透明

如果你有透明的Views你應該設置它們的opaque(不透明)屬性為YES,如:黑色半透明的可以設置為一個灰色不透明的View替代,原因是這會使系統用一個最優的方式渲染這些views

Apple的文檔對于為圖片設置透明屬性的描述是:
opaque這個屬性給渲染系統提供了一個如何處理這個view的提示;YES, 渲染系統就認為這個view是完全不透明的,這使得渲染系統優化一些渲染過程和提高性能。如果設置為NO,渲染系統正常地和其它內容組成這個View
只要一個視圖的不透明度小于1,就會導致blending(混合像素顏色的計算),blending操作在iOS的圖形處理器(GPU)中完成的。舉個例子,我們把兩個圖層疊加在一起,如果第一個圖層的有透明效果,則最終像素的顏色計算需要將第二個圖層也考慮進來。這一過程即為Blending。
為什么Blending會導致性能的損失?
如果一個圖層是完全不透明的,則系統直接顯示該圖層的顏色即可。而如果圖層是帶透明效果的,則會引入更多的計算,因為需要把下面的圖層也包括進來,進行混合后顏色的計算。

6、避免過于龐大的XIB

加載一個XIB的時候所有內容都被放在了內存里,包括任何圖片,不會即刻用到的view,你這就是在浪費寶貴的內存資源了,
storyboard僅在需要時實例化一個view controller.

7、不要阻塞主線程

大部分阻礙主進程的情形是你的app在做一些牽涉到讀寫外部資源的I/O操作,比如存儲或者網絡

8、不要在Image Views中調整圖片大小

保證圖片的大小和UIImageView的大小相同。在運行中縮放圖片是很耗費資源的,特別是UIImageView嵌套在UIScrollView中的情況下;

如果圖片是從遠端服務加載的你不能控制圖片大小,用background thread,縮放一次,然后在UIImageView中使用縮放后的圖片

9、選擇正確的Collection

Apple有一個 Collections Programming Topics(集合的編程問題) 的文檔詳盡介紹了可用的classes間的差別和你該在哪些場景中使用它們,如:

* Arrays: 有序的一組值。使用index來lookup(查找)很快,使用value lookup很慢, 插入/刪除很慢。
* Dictionaries: 存儲鍵值對。 用鍵來查找比較快。
* Sets: 無序的一組值。用值來查找很快,插入/刪除很快。

10、重用和延遲加載(lazy load) Views

點擊一個按鈕的時候需要呈現一個view的場景:

  • 創建并隱藏這個view當這個screen加載的時候,當需要時顯示它;
  • 當需要時才創建并展示。

方案一:更加消耗內存。但app操作更靈敏
方案二:消耗更少內存,但是會在點擊按鈕的時候比第一種稍顯卡頓
選擇方案:點擊按鈕時,懶加載這個view,這樣就第一次卡頓,以后都不卡頓

11、Cache

緩存那些不大可能改變但是需要經常讀取的東西。
如:遠端服務器的響應,圖片,甚至計算結果(UITableView的行高)

太多了,會在《iOS性能優化(精二)》中更新……

--

二、代碼優化

一個app的開發過程是短暫的。后面的是永無止境的維護,更新,迭代;
節省我們后期維護代碼的時間:

  • 代碼編寫規范:聲明、方法實現、懶加載、代理寫在哪個地方
  • 代碼有沒有嚴格遵守MVC或者MVVM設計模式,打造輕量級的Contreller
  • 方法名、屬性名取好,項目文檔編寫清晰

更多將會在《iOS性能優化(精二)》中更新……

喜歡請持續關注我的博客http://www.ios520junge.com/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容