版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.02.25 |
前言
我們做APP,文字和圖片是絕對不可缺少的元素,特別是圖片一般存儲在圖床里面,一般公司可以委托第三方保存,NB的公司也可以自己存儲圖片,ios有很多圖片加載的第三方框架,其中最優(yōu)秀的莫過于SDWebImage,它幾乎可以滿足你所有的需求,用了好幾年這個框架,今天想總結(jié)一下。感興趣的可以看其他幾篇。
1. SDWebImage探究(一)
2. SDWebImage探究(二)
3. SDWebImage探究(三)
4. SDWebImage探究(四)
5. SDWebImage探究(五)
6. SDWebImage探究(六) —— 圖片類型判斷深入研究
7. SDWebImage探究(七) —— 深入研究圖片下載流程(一)之有關(guān)option的位移枚舉的說明
8. SDWebImage探究(八) —— 深入研究圖片下載流程(二)之開始下載并返回下載結(jié)果的總的方法
9. SDWebImage探究(九) —— 深入研究圖片下載流程(三)之下載之前的緩存查詢操作
10. SDWebImage探究(十) —— 深入研究圖片下載流程(四)之查詢緩存后的block回調(diào)處理
11. SDWebImage探究(十一) —— 深入研究圖片下載流程(五)之SDWebImageDownloadToken和操作對象的生成和返回
12. SDWebImage探究(十二) —— 深入研究圖片下載流程(六)之下載器到具體下載操作的代理分發(fā)實現(xiàn)
13. SDWebImage探究(十三) —— 深入研究圖片下載流程(七)之NSURLSession中幾個代理的基本用法和關(guān)系
14. SDWebImage探究(十四) —— 深入研究圖片下載流程(八)之下載完成代理方法的調(diào)用
15. SDWebImage探究(十五) —— 深入研究圖片下載流程(九)之身份驗證質(zhì)詢代理方法調(diào)用
SDWebImageDownloaderOperation中緩存的代理方法
主要對應(yīng)下面這一小段代碼。
- (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);
}
}
這里主要做下面幾種工作:
- 構(gòu)造參數(shù)
NSCachedURLResponse *cachedResponse - 調(diào)用回調(diào)
completionHandler(cachedResponse);
這個代碼層面上就很簡單了,下面我們就詳細(xì)的看一下這個簡單的工作。
NSCachedURLResponse對象的構(gòu)建
首先我們看一下這個類
/*!
@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是一個類,其對象充當(dāng)存儲在框架高速緩存系統(tǒng)中的對象的包裝器。 它用于維護緩存對象的特征和屬性。
這個就是該類的作用。
這里進(jìn)行了判斷,如果請求的緩存策略cachePolicy是NSURLRequestReloadIgnoringLocalCacheData,也就是忽略本地緩存數(shù)據(jù)。那么就阻止對response的緩存,cachedResponse對象設(shè)置為nil。
completionHandler回調(diào)
這個就很簡單了,就是回調(diào)completionHandler,上面構(gòu)造的cachedResponse作為輸入?yún)?shù)輸入。
completionHandler(cachedResponse);
后記
本篇主要解析了關(guān)于緩存的代理方法,首先構(gòu)造了參數(shù)
NSCachedURLResponse *cachedResponse,并作為輸入?yún)?shù),回調(diào)block。
