关于SDWebImage的实现

2019-05-06  本文已影响0人  Shaw1211

SDWebImage为什么下载图片后先进行解码操作?

iOS 提供了两种加载图片方法,分别是UIIImage的imageNamed: 和 UIIImage的imageWithContentsOfFile:。其中,imageNamed: 方法的特点在于可以缓存已经加载的图片;使用时,先根据文件名在系统缓存中寻找图片,如果找到了就返回;如果没有,从Bundle内找到该文件,在渲染到屏幕时才解码图片,并将解码结果保留到缓存中;当收到内存警告时,缓存会被清空。当频繁加载同一张图片时,使用imageNamed: 效果比较好。而imageWithContentsOfFile:仅加载图片,不缓存图像数据。
虽然imageNamed: 方法利用缓存优化了图片的加载性能,但是第一次加载图片时,只在渲染的时候才在主线程解码,性能并不高效,尤其是在列表中加载多张高分辨率的图片(大图),可能会造成卡顿。这里抛出图片解码的概念,SDWebImageDecoder这个类是为了优化解码效率存在的。

//位图大小的计算公式,其中bytesPerPixel = 4B
bitmap_size = imageSize.width * imageSize.height * bytesPerPixel

优化解码耗时的思路是:将耗时的解码工作放在子线程中完成。SDWebImage和FastImageCache就是这么做的。具体的解码工作就是SDWebImageDecoder负责的。

上一篇下一篇

猜你喜欢

热点阅读