图片库的一般操作核心都是:
1,开启子线程
2,缓存
一、图片加载的过程
(1)假设我们使用+imageWithContentsOfFile:方法从磁盘加载图片,这个时候图片并没有解压缩
(2)然后将生成的UIImage赋值给了UIImageView
(3)在图片要渲染到界面上时步骤:
1.分配内存缓冲区用于管理文件和解压缩操作
2.将文件数据从磁盘读到内存中
3.将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的cpu操作
4.最后Core Animation使用未压缩的位图数据渲染UIIMageView的图层
系统把压缩图片这个耗时操作放在了主线程,影响性能,所以我们需要想一想能否把这个耗时操作放到子线程中去,由于
当未解压缩的图片将要渲染到屏幕时,系统会在主线程对图片进行解压缩,而如果图片已经解压缩了,系统就不会再对图片进行解压缩,
因此解决方案是 在子线程提前对图片进行强制解压缩
具体实现
1,使用 CGBitmapContextCreate
函数创建一个位图上下文
2, 把图片用 CGContextDrawImage() 绘制到画布上,然后把画布的数据取出来当作图片。这也是常见的网络图片库的做法
3,CGBitmapContextCreateImage创建一个新的解压后的位图