一. CPU、GPU协同工作
1.CPU:计算试图frame、图片解码、将需要绘制的纹理图片通过数据总线交给GPU
2.GPU:纹理混合、顶点变换计算、像素点填充计算、渲染到缓冲区
3.时钟信号:垂直同步信号V-Sync/水平同步信号H-Sync
4.iOS双设备缓冲机制:显示系统引入两个帧缓冲区、双缓冲机制
二. 图片加载流程
1.使用+imageWithContentsOfFile:
方法从磁盘中加载一张图片,此时图片还未解压缩
2.将生成的UIImage
赋值给UIImageView
3.一个隐式的CATransaction
捕获到UIImageView
图层树的变化
4.主线程下一个runloop
到来时,Core Animation
提交隐式的transaction
,对图片进行copy
· 分配内存缓冲区用于管理文件 IO 和解压缩操作
· 将文件数据从磁盘读到内存中
· 将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作
· Core Animation
中CALayer
使用未压缩的位图数据渲染 UIImageView
的图层
· CPU计算好图片的Frame
,对图片解压之后.就会交给GPU来做图片渲染
5.渲染流程
GPU获取获取图片的坐标
将坐标交给顶点着色器(顶点计算)
将图片光栅化(获取图片对应屏幕上的像素点)
片元着色器计算(计算每个像素点的最终显示的颜色值)
从帧缓存区中渲染到屏幕上
图片的解压缩是一个非常耗时的 CPU 操作,并且它默认是在主线程中执行的。那么当需要加载的图片比较多时,就会对我们应用的响应性造成严重的影响,尤其是在快速滑动的列表上,这个问题会表现得更加突出。
网友评论