iOS圖片加載渲染過(guò)程

一. CPU、GPU協(xié)同工作

1.CPU:計(jì)算試圖frame、圖片解碼、將需要繪制的紋理圖片通過(guò)數(shù)據(jù)總線交給GPU
2.GPU:紋理混合、頂點(diǎn)變換計(jì)算、像素點(diǎn)填充計(jì)算、渲染到緩沖區(qū)
3.時(shí)鐘信號(hào):垂直同步信號(hào)V-Sync/水平同步信號(hào)H-Sync
4.iOS雙設(shè)備緩沖機(jī)制:顯示系統(tǒng)引入兩個(gè)幀緩沖區(qū)、雙緩沖機(jī)制

二. 圖片加載流程

1.使用+imageWithContentsOfFile:方法從磁盤中加載一張圖片,此時(shí)圖片還未解壓縮
2.將生成的UIImage賦值給UIImageView
3.一個(gè)隱式的CATransaction捕獲到UIImageView圖層樹的變化
4.主線程下一個(gè)runloop到來(lái)時(shí),Core Animation提交隱式的transaction,對(duì)圖片進(jìn)行copy
· 分配內(nèi)存緩沖區(qū)用于管理文件 IO 和解壓縮操作
· 將文件數(shù)據(jù)從磁盤讀到內(nèi)存中
· 將壓縮的圖片數(shù)據(jù)解碼成未壓縮的位圖形式,這是一個(gè)非常耗時(shí)的 CPU 操作
· Core AnimationCALayer使用未壓縮的位圖數(shù)據(jù)渲染 UIImageView 的圖層
· CPU計(jì)算好圖片的Frame,對(duì)圖片解壓之后.就會(huì)交給GPU來(lái)做圖片渲染
5.渲染流程
GPU獲取獲取圖片的坐標(biāo)
將坐標(biāo)交給頂點(diǎn)著色器(頂點(diǎn)計(jì)算)
將圖片光柵化(獲取圖片對(duì)應(yīng)屏幕上的像素點(diǎn))
片元著色器計(jì)算(計(jì)算每個(gè)像素點(diǎn)的最終顯示的顏色值)
從幀緩存區(qū)中渲染到屏幕上

圖片的解壓縮是一個(gè)非常耗時(shí)的 CPU 操作,并且它默認(rèn)是在主線程中執(zhí)行的。那么當(dāng)需要加載的圖片比較多時(shí),就會(huì)對(duì)我們應(yīng)用的響應(yīng)性造成嚴(yán)重的影響,尤其是在快速滑動(dòng)的列表上,這個(gè)問(wèn)題會(huì)表現(xiàn)得更加突出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容