起因


重温旧知识;

参考


SDWebImage缓存机制策略 参考一

SDWebImage缓存机制策略 参考二

AFNetWorking 和 SDWebImage 图片缓存对比

区别


AFNetworking 利用的是http的缓存机制!做本地缓存! SDWebImage 利用的是本地文件缓存!

自从iOS5.0之后,NSURLCache 已经加入了硬盘缓存操作,那么SDWebImage对比朴实的NSURLRequest有什么优势呢?

NSURLCache 在iOS5之后加入了未加工的HTTP返回值的内存和闪存缓存。每一次缓存查找命中,app都会将原生的数据转换成UIImage。这种操作需要一些额外的解析操作:HTTP数据的解码、内存拷贝等等。

另一方面,SDWebImage 将UIImage缓存到内存,但是会将经过压缩和解码的图片存入闪存。UIImage就像用NSCache存入内存中一样,没有额外的内存复制,而且可以在你的app需要内存的时候腾出内存空间。

另外,在你第一次在UIImageView中使用UIImage的时候,主线程上的image解压操作会被SDWebImageDecoder转移到后台去。

最后,SDWebImage 可以完全避免复杂、错误配置的HTTP缓存通信,这极大的加速了缓存查找。

AFNetworking也在UIImageView中加入了相似的类,那SDWebImage 是不是仍有用武之地?

AFNetworking 并没有针对闪存的缓存操作而是仅仅依赖于系统的表现。前一个问题的答案回答了这个问题。同时,AFNetworking 也没有图片的后台解压操作。另外AFNetworking 无法保证同样的URL不会被下载数次。

假如你已经使用了AFNetworking ,仅仅需要一个比较简单的异步图片加载功能类,对性能和内存使用并没有太高要求的话,AFNetworking 的UIImageView 类应该能满足你的需求。