SDWebImage探究(十六) —— 深入研究图片下载流程(十)之缓存相关代理方法调用

版本记录

版本号 时间
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 
{
    @private
    NSCachedURLResponseInternal *_internal;
}

NSCachedURLResponse是一个类,其对象充当存储在框架高速缓存系统中的对象的包装器。 它用于维护缓存对象的特征和属性。

这个就是该类的作用。

这里进行了判断,如果请求的缓存策略cachePolicyNSURLRequestReloadIgnoringLocalCacheData,也就是忽略本地缓存数据。那么就阻止对response的缓存,cachedResponse对象设置为nil。


completionHandler回调

这个就很简单了,就是回调completionHandler,上面构造的cachedResponse作为输入参数输入。

completionHandler(cachedResponse);

后记

本篇主要解析了关于缓存的代理方法,首先构造了参数NSCachedURLResponse *cachedResponse,并作为输入参数,回调block。

SDWebImage探究(十六) —— 深入研究图片下载流程(十)之缓存相关代理方法调用_第1张图片

你可能感兴趣的:(SDWebImage探究(十六) —— 深入研究图片下载流程(十)之缓存相关代理方法调用)