SDWebImage是iOS开发中十分流行的库,大多数的开发者在下载图片或者加载网络图片并且本地缓存的时候,都会用这个框架。官方给出的定义为:
//一个异步下载图片并且支持缓存的 UIImageView 分类
Asynchronous image downloader with cache support as a UIImageView category
缓存流程:在callCacheProcessForOperation
判断用户是否设置了仅下载,如果设置了直接进入到callDownloadProcessForOperation
开始下载流程,如果没设置则先调用queryImageForKey:(key, options, context, completionBlock)
适配SDImageCacheOptions
,然后再调用queryCacheOperationForKey
开始缓存查找,首先在内存中查找,如果有则返回;没有则在磁盘中查找,如果都没有查找到则进入下载流程
SDWebImageContext / SDWebImageMutableContext:
可以看到SDWebImageContext / SDWebImageMutableContext
其实就是
以 SDWebImageContextOption
为key、id
(指定类型或者协议)为value
的NSDictionary/NSMutableDictionary
typedef NSDictionary<SDWebImageContextOption, id> SDWebImageContext;
typedef NSMutableDictionary<SDWebImageContextOption, id>SDWebImageMutableContext;
而 SDWebImageContextOption 是一个可扩展的String枚举
typedef NSString * SDWebImageContextOption NS_EXTENSIBLE_STRING_ENUM;
SDWebImage定义了10个SDWebImageContextOption
的key、对应的value类型和定义的位置
|
Key | Value | Define |
---|---|---|
SDWebImageContextSetImageOperationKey |
NSString |
SDWebImageDefine.m |
SDWebImageContextCustomManager |
SDWebImageManager |
SDWebImageDefine.m |
SDWebImageContextImageTransformer |
id<SDImageTransformer> |
SDWebImageDefine.m |
SDWebImageContextImageScaleFactor |
CGFloat |
SDWebImageDefine.m |
SDWebImageContextStoreCacheType |
SDImageCacheType |
SDWebImageDefine.m |
SDWebImageContextDownloadRequestModifier |
id<SDWebImageDownloaderRequestModifier> |
SDWebImageDefine.m |
SDWebImageContextCacheKeyFilter |
id<SDWebImageCacheKeyFilter> |
SDWebImageDefine.m |
SDWebImageContextCacheSerializer |
id<SDWebImageCacheSerializer> |
SDWebImageDefine.m |
SDWebImageContextLoaderCachedImage |
UIImage/NSImage<SDAnimatedImage> |
SDImageLoader.m |
具体使用方法
[self.imageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:SDWebImageFromLoaderOnly context:@{SDWebImageContextStoreCacheType:@"SDImageCacheTypeNone"}];