先从downloadImageWithURL方法讲起:
每次方法调用的时候,就会创建一个SDWebImageCombinedOperation对象。
有三个属性,并遵循了SDWebImageOperation代理。
cancelled 是用来标记状态。
cancelBlock 是用来回调。
cacheOperation 是磁盘查找时,创建的。 也是用来判断状态。
代理方法:
先标记状态 cancelled = YES;
任何调用cancel block
imageCache 是 SDImageCache类。 主要提供缓存和磁盘的查询和存储工作。
下面一系列 都是对SDWebImageDownloaderOptions的设置。
imageDownloader是SDWebImageDownloader类。 主要是负责下载。
调用了downloadImageWithURL方法。
下面一系列的处理,就是图片下载完成之后的处理。如果图片下载成功,就调用SDImageCache的storeImage方法。同时存到缓存和磁盘当中。
在这里实现了operation 的cancelBlock 。
对subOperation ,也就是downloadImageWithURL函数返回的SDWebImageDownloaderOperation,进行了cancel 处理。
并且将这个operation从runningOperations 中移除。
最后,downloadImageWithURL函数返回这个给operation上一级使用。 目的,有两点:
1.供外界进行取消操作。
2.对于同一个ImageView或者Button,多次请求网络时,将之前操作cancel掉。
其他:
SDWebImageManager是一个单例,在初始化时:
创建
imageCache (单例)
imageDownLoader (单例)
failedURLs 用来加载失败的URL,下次再请求时,直接返回错误。
runningOperations 存储的是正在进行中的SDWebImageDownloaderOperation对象,如果失败,或者完成,就移除。
还有一个作用是