SDWebImage源码阅读记录

以前从来没有静下心来好好看看一些大神写的常用第三方库,现在看看,记录一下。。。

从使用看起

会经过UIImageView+WebCache类里的UIImageView+WebCache

然后统一调用到UIView+WebCache里的

下面逐行解释该方法实现

下面的三个方法 介绍了如何将Operation 绑定到自己 并执行了什么操作。。。

接下来回到SDWebImageManager 里面创建 Operation的操作。

由于该方法比较长 捡重要的说。。。

下面方法是我删减了好多代码 把主要逻辑提取出来的 所以xcode会报错。。。 将就着看一下

里面有两个主要地方 一个是创建查找缓存的Operation 和 创建下载的Operation

我们先来看 下载的东西 

该方法要返回 的SDWebImageDownloaderOperation 

该方法里面只有一句 那就是调用了

同时传入了 创建SDWebImageDownloaderOperation的Block, 先来看该Block

block 详细介绍了 创建request的过程 以及一些Operation的基本设置(类似优先级什么的)

接下来我们往下看 这个地方为什么用了 block 不直接创建Operation呢?

总结以上来说就是 先判断是否有正在进行的任务 有的话移除 然后重新添加

然后加入到任务队列downloadQueue里面 正式线程开启异步

同时创建一个对象 该对象只是个容器 保存了此次的任务及回调 为了给ImageManager统一管理 这个逻辑方式值得学习。。。

SDWebImageDownloaderOperation下载任务是怎么实现的呢 ----- 继承于NSOperation 

看一下start方法 从这里看到了SDImage网络方面是对NSURLSession的封装 不再详细讲述

感兴趣的可以细看一下 里面也有app进入后台的操作。。。

这里重点要讲一下 接收数据的处理

这个地方是对进度回调 很好理解

这个是一些大图边下载变显示的处理(感兴趣的可以多了解一下据说是没有使用 Incremental编码 会显示的时候有点儿模糊)

然后终点看一下下载完成的协议方法里面 有这么一句话

image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&imageData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(shouldScaleDown)}];

此处为图片的解码,此过程可以放在异步处理 当加在多图的时候可以提升性能,因为ios本身提供的图片imageNamed,contentFIle都是同步处理,当加载多图的时候会明显卡顿

今天先说到这儿。。 下班了。。。 明天看一下缓存那块的处理

猜你喜欢

转载自blog.csdn.net/evol_f/article/details/82116324