主要作用:异步加载图片并且提供缓存机制。
主要用到的类别: SDWebImage+WebCache
主要用到的方法: [self.imageView sd_setImageWithURL: placeholderImage:]
核心方法: [self.imageView sd_setImageWithURL:
placeHolderImage:
options:
progress:
completed:]
加载选项options(共13个,这里只列出常用的)
默认加载选项:
SDWebImageRetryFailed(保证不会多次尝试访问一个失效或者错误的URL)
SDWebImageLowPriority (当scriollview滑动时 图片不会被加载)
可选选项
SDWebImageCacheMemoryOnly (不支持磁盘缓存,只有内存缓存)
SDWebImageProgressiveDownload (渐进式下载)
SDWebImageRefreshCached (当一个URL对应的图片改变了,会更新缓存)
加载流程:
1.[self sd_cancelCurrentImageLoad]
保证当前没有正在进行的异步下载操作,不会与即将进行的操作发生冲突
2.设置占位符
if (!(options & SDWebImageDelayPlaceholder)) {
self.image = placeholder;
}
如果传入的 options 中没有 SDWebImageDelayPlaceholder(默认情况下 options == 0), 那么就会为 UIImageView 添加一个临时的 image, 也就是占位图.
3.获取图片
判断传入的URL是否为空,如果为空做异常处理。如果非空一个全局的单例SDWebImageManager 就会调用以下方法
[SDWebImageManager.sharedManager
downloadImageWithURL:
options:
progress:
completed:]
SDWebImageManage是UIImageView+WebCache 和 SDWebImageDownloader, SDImageCache 之间构建一个桥梁 起到协调工作的作用。
具体源码实现:
首先判断URL是否被正确传入。传入的NSString类型被转换为NSURL,如果转换失败那么URL被赋值为空,这个下载操作就会出错,做异常处理。
如果传入的URL正确,那么会调用[self cacheKeyForURL:url]方法找到key再调 用operation.cacheOperation=[self.imageCache queryCacheOperationForKey:key done:^(UIImage *cachedImage, NSData *cachedData, SDImageCacheType cacheType) {} 在缓存中查找以前是否下载过相同的图片。如果下载过拿到image赋值给imageview,如果没有就调用SDWebImageDownloader的实例方法id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url
options:downloaderOptions
progress:progressBlock
completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { ... }];
如果返回正确的downloadedImage赋值给imageview,并且调用SDWebImageCache的实例方法[self.imageCache storeImage:downloadedImage
recalculateFromImage:NO
imageData:data
forKey:key
toDisk:cacheOnDisk];
来存储这个图片数据。
iOS源代码分析——SDWebImage
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 图片下载的这些回调信息存储在SDWebImageDownloader类的URLOperations属性中,该属性是...
- 简单的介绍 SDWebImage 提供图片的异步下载和缓存,对外通过 categories 封装 UIImageV...