美文网首页
解析SDWebImage + webCache 调用的 内部下载

解析SDWebImage + webCache 调用的 内部下载

作者: 忘忧的世界 | 来源:发表于2019-05-14 16:55 被阅读0次

    白话文:

    下载图片需要什么。

    无非就是url 

    以及以什么形式去下载,

    没下载之前是否应该显示占位图,

    ====》分别对应url,option,placeholder

    下载过程中我们关心什么

    进度,下载了多少

    对应=============》进度

    下载完了我们该怎么处理图片,是框架直接给你设置好,还是给你你自己设置。

    如果下载失败我们该怎么办。 

    对应============》完成回调

    所以源码步骤如下,

    1.先判断是否有已经进行的操作,如果有 咱也不能重复下载啊,肯定会先取消之前的操作。

    2.还没有图片咱是不是应该给个好看的图片占位一下,这取决于你啊  所以得判断一下,option,如果让咱延迟设置占位图 ,那咱就啥也不干,如果不是让咱延迟设置,咱肯定设置占位图 所以就搞了这个方法

    -(void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock

    3.然后咱开始准备下载了吧 下载得给咱点提示吧  所以咱得找个进度条啊 什么的表示一下吧。如果进度条能用 咱就加上去呗。还有进度的数据咱也应该初始化一下吧

    4.接下来就是用manager下载了,下载需要啥 无非url  还有option  一些进度的回调啊(暴露给你让你做一些操作),统样完成之后你可能也得干点事 比如说处理这张图片数据,或者自己设置图片(咱也不敢问,咱也不敢说)。所以咱用了 (id <SDWebImageOperation>)loadImageWithURL:(nullable NSURL *)url

                                         options:(SDWebImageOptions)options

                                        progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock

                                       completed:(nullable SDInternalCompletionBlock)completedBlock

    这个方法会返回一个遵守<SDWebImageOperation>协议的对象  这个对象就是这个下载图片的操作呗,这个协议定义的方法就是一个取消操作的方法,所以咱下次如果更新了url重新下载图片,所以咱之前还没下完的,咱就得取消这个操作,这个操作就得被咱存储起来吧 ,所以就得   [self sd_setImageLoadOperation:operation forKey:validOperationKey];   

    方法去操作存储啊。

    接下来咱说说completedBlock这个回调

    这个回调干了啥事呢?

    他是这么定义的 (UIImage * _Nullable image,NSError * _Nullable error,SDImageCacheType cacheType,NSURL * _Nullable imageURL)

    这是完成回调嘛  肯定暴露给咱下载好的图片嘛 所以

    第一个参数就是下载好的图片, 有种特殊情况就是万一咱下载的操作挂了呢。失败了呢

    第二个参数就是失败后暴露的错误, 然后咱也得做一下缓存吧,缓存方式得设置一下吧,

    第三个参数就是设置缓存类型,三种:网上下载(缓存个p),缓存内存,缓存到磁盘

    第四个很明显 就是你要下载图片用到的url

    完成回调咱该干什么呢?

    1.你的指示器呢?是不是应该也应该移除了 

    2.你的进度呢,你到底下载完成了有进度,还是一点都没下载,你得判断一下你的进度吧,没有进度咱也得把你设置成完成状态

    3.然后咱判断是不是应该设置图片

    如果不应该(什么时候不应该呢,有两种情况,一种是我们得到了图片,但是option == SDWebImageAvoidAutoSetImage,一种是没有图片,并且SDWebImageDelayPlaceholder没有设置)

    不应该设置咱就直接执行你给咱的回调。

    如果不应该,咱就给你设置图片,设置图片咱得判断一下你图片是否存在?

    1.存在,设置。

    2.不存在,咱再判断你的option == SDWebImageDelayPlaceholder,是咱就直接把图片设置成你的占位图

    相关文章

      网友评论

          本文标题:解析SDWebImage + webCache 调用的 内部下载

          本文链接:https://www.haomeiwen.com/subject/uxleaqtx.html