iOS中解決頁面卡頓小技巧(很常用)

來源:互聯網
上載者:User

標籤:

1.為什麼出現頁面卡頓?

在開發中我們常常會遇到布局比較複雜的cell,在滑動的時候會導致介面不流暢,出現卡頓的現象,這是由於CPU計算和GPU渲染,之間未及時交換資料丟失幀導致的結果。
2.常見解決辦法1).UIImageView盡量設定為不透明
  • opque盡量設定為YES

當UIImageView的opque設定為YES的時候其alpha的屬性就會無效,UIImageView的半透明取決於其圖片半透明或者UIImageView本身的背景色合成的圖層view是半透明的。

如果圖片全部不是半透明就不會觸發圖層的blend操作,整個圖層就會不透明。

如果疊加的圖片有出現半透明的,就會立馬觸發圖層的blend操作,整個圖層不透明。

  • 背景色儘可能設為alpha值為1

當某一塊圖層的alpha和其superView的背景色alpha不一樣的時候會觸發alpha合成操作,這是一項看似很簡單但卻是非常消耗CPU效能的操作。

2).UIView的背景色設定
  • UIView的背景色盡量不要設定為clearColor,這樣也會觸發alpha疊加,在UITableView滑動的時候是非常消耗效能的。子視圖的背景色儘可能設定成其superView的背景色,這樣圖層合成的時候不會觸發blend操作。

  • 最好不使用帶alpha通道的圖片,如果有alpha盡量讓UI設計人員取消alpha通道。


3).cell上layer盡量避免使用圓角
  • 在工作中關於滑動介面我們會時常遇到cell行設定頭像為圓角等需求,這時候我們盡量避免使用layder.cornerRadius,因為這會觸發離屏渲染。離屏渲染很耗時間。

    離屏渲染:是GPU渲染區的一個渲染緩衝區,我們所用的所有顯示屏的圖形映像都是通過GPU進行渲染,然後顯示在螢幕上。GPU負責渲染會把渲染的圖形放到緩衝區然後CPU就會發一個垂直訊號顯示到螢幕。

  • 如果要使用圓角,我們可以設定為layer.shouldRasterize = YES,其實這個設定是觸發光柵化,可以大大提高渲染的效能。我的理解光柵化就是類似於cell的重用機制。

    光柵化:把第一次渲染好的圖層放到緩衝區,那麼下次不需要再離屏渲染直接就可以從緩衝區拿去使用。

4).最佳化圖片的載入方式

圖片的載入方式有兩種形式:

UIImageView *image = [UIImageView imageView:@"1.png"];

UIImageView *image = [UIImageView imageWithContentOfFile:@"1.png"];

兩種載入圖片方式的區別:

  • 第一種:當我們經常需要這張圖片並且僅僅是小圖的時候,我們可以使用此種方式載入圖片。

    這種方式是把圖片緩衝在圖片緩衝區,當我們使用的時候會通過圖片的名字也就是通過key的方式去尋找圖片在緩衝區的記憶體位址。

    當我們使用很多圖片的時候系統就會開闢很多記憶體來儲存圖片,所以qq、我們很多時候都會去清除快取作業。

  • 第二種:當我們使用工程裡面的一張大圖並且使用次數很少甚至為1次的時候,我們優先會採用這種方式載入圖片,這種方式當使用完圖片的時候會立即丟棄釋放資源,所以對效能不會帶來負擔。

5).盡量延遲圖片的載入
  • 當我們在滑動頁面的時候尤其對於那種布局特別複雜的cell,滑動的時候不要載入圖片,當滑動停止得時候再進行圖片的載入。

    我們都知道不管是UITableView還是UIScrollView在滾動的時候需要顯示東西都是通過runLoop去拿。

    當滾動的時候runLoop會處於NSRunLoopTrackingMode的模式,我們可以通過一個主線程隊列dispatch_after或者selfPerformSelector設定runLoop的模式為NSDefaultRunLoopMode模式,就可以做到停止滾動再載入圖片。

    註:其實嚴格意義上selfPerformSelector的事件就是在主線程隊列中等待。

  • 優先載入理念

    採用優先載入的理念,既先展示一部分,當滑動的時候再載入下面的一部分這樣就保持流暢。

6).避免阻塞主線程
  • 讓圖片的繪製、圖片的下載、對象的建立、文本的渲染等這些耗時的操作儘可能採用子線程非同步方式去處理,對於layer及UI的操作不得不在主線程裡面,只能想辦法最佳化。
7).xib、storyBoard、純程式碼的問題
  • 蘋果推出storyboard確實為開發人員節省了大量的時間,提高了開發效率,但是對於那種
    複雜的滑動介面,利用storyboard是非常消耗資源的,不信的可以試試用效能工具timeProfie看看CPU所佔的效能百分比,其CPU的資源遠遠大於純程式碼布局。


iOS中解決頁面卡頓小技巧(很常用)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.