版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.02.25 |
前言
我们做APP,文字和图片是绝对不可缺少的元素,特别是图片一般存储在图床里面,一般公司可以委托第三方保存,NB的公司也可以自己存储图片,ios有很多图片加载的第三方框架,其中最优秀的莫过于SDWebImage,它几乎可以满足你所有的需求,用了好几年这个框架,今天想总结一下。感兴趣的可以看其他几篇。
1. SDWebImage探究(一)
2. SDWebImage探究(二)
3. SDWebImage探究(三)
4. SDWebImage探究(四)
5. SDWebImage探究(五)
6. SDWebImage探究(六) —— 图片类型判断深入研究
7. SDWebImage探究(七) —— 深入研究图片下载流程(一)之有关option的位移枚举的说明
8. SDWebImage探究(八) —— 深入研究图片下载流程(二)之开始下载并返回下载结果的总的方法
9. SDWebImage探究(九) —— 深入研究图片下载流程(三)之下载之前的缓存查询操作
10. SDWebImage探究(十) —— 深入研究图片下载流程(四)之查询缓存后的block回调处理
11. SDWebImage探究(十一) —— 深入研究图片下载流程(五)之SDWebImageDownloadToken和操作对象的生成和返回
12. SDWebImage探究(十二) —— 深入研究图片下载流程(六)之下载器到具体下载操作的代理分发实现
13. SDWebImage探究(十三) —— 深入研究图片下载流程(七)之NSURLSession中几个代理的基本用法和关系
14. SDWebImage探究(十四) —— 深入研究图片下载流程(八)之下载完成代理方法的调用
15. SDWebImage探究(十五) —— 深入研究图片下载流程(九)之身份验证质询代理方法调用
SDWebImageDownloaderOperation中缓存的代理方法
主要对应下面这一小段代码。
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
willCacheResponse:(NSCachedURLResponse *)proposedResponse
completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler {
NSCachedURLResponse *cachedResponse = proposedResponse;
if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) {
// Prevents caching of responses
cachedResponse = nil;
}
if (completionHandler) {
completionHandler(cachedResponse);
}
}
这里主要做下面几种工作:
- 构造参数
NSCachedURLResponse *cachedResponse
- 调用回调
completionHandler(cachedResponse);
这个代码层面上就很简单了,下面我们就详细的看一下这个简单的工作。
NSCachedURLResponse对象的构建
首先我们看一下这个类
/*!
@class NSCachedURLResponse
NSCachedURLResponse is a class whose objects functions as a wrapper for
objects that are stored in the framework's caching system.
It is used to maintain characteristics and attributes of a cached
object.
*/
@interface NSCachedURLResponse : NSObject <NSSecureCoding, NSCopying>
{
@private
NSCachedURLResponseInternal *_internal;
}
NSCachedURLResponse
是一个类,其对象充当存储在框架高速缓存系统中的对象的包装器。 它用于维护缓存对象的特征和属性。
这个就是该类的作用。
这里进行了判断,如果请求的缓存策略cachePolicy
是NSURLRequestReloadIgnoringLocalCacheData
,也就是忽略本地缓存数据。那么就阻止对response的缓存,cachedResponse
对象设置为nil。
completionHandler回调
这个就很简单了,就是回调completionHandler
,上面构造的cachedResponse
作为输入参数输入。
completionHandler(cachedResponse);
后记
本篇主要解析了关于缓存的代理方法,首先构造了参数
NSCachedURLResponse *cachedResponse
,并作为输入参数,回调block。