一. 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 Animation 中CALayer使用未壓縮的位圖數(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)得更加突出。