美文网首页
细读SDWebImage 源码- SDWebImageDownL

细读SDWebImage 源码- SDWebImageDownL

作者: 三三哥 | 来源:发表于2020-07-16 11:39 被阅读0次

前言:本文章非快餐搬运,需要花点耐心阅读,因为是结合自己理解从Manager 开始一个方法一个方法去阅读解析,这个过程是痛苦的、但是读完之后是喜悦的,也希望指出个人理解不准确的地方,大家共同进步。

文章设定:较少篇幅的代码片段直接复制过来解析说明,篇幅较长的就上截图了,这样也方便各位观看。

本篇文章采用属性定位代码片段方法来探究SDImageCacheConfig 的一些配置属性具体作用,而不仅仅通过头文件的注释去理解。

SDWebImageDownloader 单例里面开始阅读:

初始化里面就做了 defaultSessionConfiguration 配置初始化操作

operationClass 是SDWebImage 自定义的一个继承NSOperation 的 任务下载管理类,这里就不细解释了。

shouldDecompressImages 是否再下载完成立即解压的标识位

executionOrder  决定operation 的任务执行顺序,目前支持  FIFO(先进先出,队列)和LIFO(后进先出 栈)

_downloadQueue 下载队列,没啥好解释的,默认设置最大任务操作数 为6 个

HTTPHeaders :网络请求头部信息的映射字典

URLOperations  以 url为key SDWebImageDownloaderOperation为Value的映射 

operationsLock : 信号量锁,用来保证 URLOperation 线程安全操作。

headersLock: 信号量锁,用来保证网络请求头部信息 线程安全操作。

我们进入 - (void)createNewSessionWithConfiguration:(NSURLSessionConfiguration *)sessionConfiguration 看看:

[self cancelAllDowloads]     创建新的网络任务之前先 取消队列任务

125  创建session delegateQueue 设置为nil,系统自动分配串行队列执行任务

下面开始从头文件挑一些比较经典的方法来"解说":

提供可自定义的下载任务类 需要继承NSOperation ,并且需要遵循SDWebImageDownloaderOperationInterface 协议,这个其实体现了面向协议编程的思想,开发者可以按照自己需求自定义NSOperation,只需遵循 SDWebImage 实现的协议即可,这样就避免了 去继承 SD的 SDWenImageDownloaderOperation。

看下dowloader 下载方法里面具体做了哪些操作:

可以看到 下载先调用了一个- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url

                                                   options:(SDWebImageDownloaderOptions)options

                                                  progress:(nullableSDWebImageDownloaderProgressBlock)progressBlock

                                                 completed:(nullableSDWebImageDownloaderCompletedBlock)completedBlock

回调, 这个方法里面主要就是创建下载的token:

operation 其实是回调到外部下载方法里获取的入参(这样写只能说代码看起来比较紧凑)。我们还是回到 外部下载方法里面看看:

204-224 :设置超时时间,创建下载的缓存策略,创建下载请求request,以及cookies策略,特别说明一下 210 和215 采用位运算提高操作效率(比较亮眼,值得借鉴)。

217-222: block 外放自定义写法,开放给有修改header的需求的,没有就使用默认的header,多提一句AF也大量利用次特性来外放自定义(值得借鉴)

226- 230 :

验证方式:域名或者是 用户名密码

232 :

处理任务优先级

238:

 任务执行的方式 前面已经说过了

到此 SDWebImageDownLoader 该说的也说的差不多了,其中不足的地方欢迎交流指正。

相关文章

网友评论

      本文标题:细读SDWebImage 源码- SDWebImageDownL

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