以前从来没有静下心来好好看看一些大神写的常用第三方库,现在看看,记录一下。。。
从使用看起
会经过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都是同步处理,当加载多图的时候会明显卡顿
今天先说到这儿。。 下班了。。。 明天看一下缓存那块的处理