标签:
SDWebImage与iOS系统自带的缓存相比,优势是什么?
从iOS5开始,iOS NSURLCache对于原生得HTTP Response做内存和磁盘缓存。每一次缓存命中(缓存命中就是说内存或者磁盘中有要请求的数据)的时候,app必须把原生的数据转成UIImage。这需要很多操作,比如数据分析转化、内存拷贝等等。
另一方面,SDWebImage在内存中缓存UIImage,在磁盘上存原来的压缩的(但是,已经解码)image文件。UIImage用NSCache存在内存里,所以不需要拷贝操作,并且只要app需要内存,内存就可以被释放。
除此之外,你第一次在一个UIImageView中用UIImage的时候,图片解压通常在主线程,而在SDWebImageDecoder强制解压错做在后台(不在主线程)做。
SDWebImage提供了三个category来进行缓存:
SDWebImage的缓存机制(以UIImageView为例):
setImageWithURL:placeholderImage:options:
先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。downloadWithURL:delegate:options:userInfo:
SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类, SDImageCache: queryDiskCacheForKey:delegate:userInfo:
用来从缓存根据CacheKey查找图片是否已经在缓存中imageCache:didFindImage:forKey:userInfo:
webImageManager:didFinishWithImage:
来显示图片。notifyDelegate:
。imageCache:didFindImage:forKey:userInfo:
。进而回调展示图片。imageCache:didNotFindImageForKey:userInfo:
。SDWebImageDownloader
开始下载图片。connection:didReceiveData:
中利用 ImageIO 做了按图片下载进度加载效果。connectionDidFinishLoading:
数据下载完成后交给 SDWebImageDecoder
做图片解码处理。notifyDelegateOnMainThreadWithInfo:
宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo:
回调给 SDWebImageDownloader。imageDownloader:didFinishWithImage:
回调给 SDWebImageManager 告知图片下载完成。SDWebImagePrefetcher
可以预先下载图片,方便后续使用。转自:http://www.overcode.hk/?p=449
标签:
原文地址:http://www.cnblogs.com/xjshi/p/4389342.html