UIImageView加载过程
iOS从磁盘加载一张图片,使用UIImageVIew显示在屏幕上,需要经过以下步骤:
- 从磁盘拷贝数据到内核缓冲区
- 从内核缓冲区复制数据到用户空间
- 生成UIImageView,把图像数据赋值给UIImageView
- 如果图像数据为未解码的PNG/JPG,解码为位图数据
- CATransaction捕获到UIImageView layer树的变化
- 主线程Runloop提交CATransaction,开始进行图像渲染
- 如果数据没有字节对齐,Core Animation会再拷贝一份数据,进行字节对齐。
- GPU处理位图数据,进行渲染
性能优化
缩率图
异步加载
使用Image Asset Catalogs
强制解码
在子线程对图片原始数据强制解码,然后把解码后的图片通过主线程加载 (Core Graphics 框架的 CGBitmapContextCreate)
补充
- 不要同时在内存中加载所有图像 内存警告时释放图片加载内存
- 提前写入缓存
- cell消失时 取消加载