天天看點

iOS頁面圖層性能和頁面卡頓的原因iOS頁面圖層性能和頁面卡頓的原因

iOS頁面圖層性能和頁面卡頓的原因

2016感悟和分享

這是我2017年分享到朋友圈出來的第一篇文章,也是簡書第一篇文章.

總結2016,兩字經曆,遇到很多人,有離開的,有留下的,感謝這些同學朋友同僚和經曆.即使是進醫院的時候我也覺得也挺好的,可能很掙紮,痛苦和鬧心,至少經曆了才會體會到點什麼,才能看明白些什麼,雖然現在還要吃藥休息,我覺得時間還是要花在有意義的事情上比較好吧,有些無關痛癢的事情也沒時間去想,我談不上情懷,但至少算是出于初衷和喜歡.未來的時間,隻要我晚上有時間狀态不錯的時候,我就會把所見所學所悟整理成文字和demo分享給喜歡iOS技術的同學們.下面這篇文章我是結合我自己所見所學和微信裡好朋友的文字文章,感謝!下面入正題:

iOS系統如何把圖像内容展示到螢幕,呈現到我們的面前?為什麼APP會感覺卡頓?

iOS系統的手機呈現内容到展示,需要先了解CPU和GPU,因為兩者的共同參與,我們才能看到APP的内容展示.CPU我們很好了解,但還是要說一下:CPU負責計算顯示内容,視圖的建立,布局的計算,圖檔解碼,文本繪制都是通過CPU計算出來.那這個GPU是什麼?GPU負責把CPU計算出的結果變換合成渲染,然後呈遞給幀緩沖區,等待VSync信号到來,才會有我們看到APP的内容.所謂的頁面卡頓是因為垂直同步機制,在一個VSync時間内,CPU或者GPU沒有完成内容的送出,導緻這一幀丢失了,而下一個VSync時間到來不會把上一幀所丢失的内容在做一遍,是以在下一個VSync時間的顯示之前,螢幕會保留之前的内容不變.

為了平衡CPU和GPU的負荷運算,不要在兩者任何一方做負荷運算

CPU負荷任務

1.計算布局

2.對象建立

3.autolayout複雜的頁面會消耗CPU,增加負荷

4.文本計算:文本長寬高比如cell裡文本的計算

5.文本控件label,textField,textView,webView,其排版和繪制都是在主線程進行,當顯示大量文本時,會很大的消耗CPU.包含文本的視圖在改變布局時會觸發文本重新渲染,對于靜态文本我們應該要盡量減少它所在視圖的布局修改

6.圖像的繪制,圖像繪制我會在之後詳細講解動畫的分享文章中細說,CG開頭方法消耗CPU資源,我們可以将繪制過程放在背景線程,然後在主線程裡講結果設定到layer的contents中

6.圖檔的解碼 imageNamed加載圖檔後會立即解碼然後系統會緩存起來,有一個問題是我們不知道這個圖檔何時會釋放掉,這個緩存政策沒有公開

GPU負荷任務

GPU任務單一,接收送出紋理,點的描述,應用變換,渲染.大體上講CAlayer的屬性大多數都是GPU繪制.GPU之後我會具體用代碼補充進來看下效果,就很明顯了,先說大概幾點:

避免GPU負荷的幾點:

1.不要有大量的幾何結構,減少在短時間大量圖檔的顯示

2.避免視圖的混合,減少透明的視圖

3.不要離屏渲染,不要在目前螢幕緩沖區以外開辟的一個緩沖區進行渲染和操作.

總結

相關理論知識,大家可能都有了解,我隻是進行總結了下,之後我有時間會盡量完善,在每一個點後面寫個demo和連結供大家下載下傳和探讨,也會分享出更多的文章包括我自己寫的一套架子和一些實用的工具類,自己總結和所見所學所悟,不對的地方希望各路大牛們指點.有病在身先行休息,最後感謝所有朋友,謝謝.