NSURLRequestCachePolicy—iOS快取策略
NSURLRequestCachePolicy:顧名思義,是為了與cached responses確定互動策略的列舉,具體列舉值如下:
typedef enum NSURLRequestCachePolicy : NSUInteger { NSURLRequestUseProtocolCachePolicy = 0, NSURLRequestReloadIgnoringLocalCacheData = 1, NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, //NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, NSURLRequestReturnCacheDataElseLoad = 2, NSURLRequestReturnCacheDataDontLoad = 3, NSURLRequestReloadRevalidatingCacheData = 5 }NSURLRequestCachePolicy;
我們的快取策略會在NSURLRequest和NSURLProtocol體現,如果你想對cached responses做自定義的處理,需要在這兩個類進行操作; 對於使用者來說,則會造成不同的體驗
注意:只有響應http和https的請求會被快取,其他的協議需要去自定義。

NSURLRequestUseProtocolCachePolicy邏輯樹
簡短的概括:
1、如果沒有快取,會直接從後臺請求資料
2、如果沒必要每次重新驗證cache,且cache還是新鮮的(幾天之內,幾小時?的資料),返回cache response
3、如果cache是不新鮮的,或者需要每次重新驗證cache,會發送Head請求到源資料判斷cache是否被改變。如果改變了,去後端請求,沒有改變則返回cache response
ofollow,noindex">NSURLRequestUseProtocolCachePolicy :預設策略,具體的快取邏輯和協議的宣告有關,如果協議沒有宣告,不需要每次重新驗證cache。 如果請求協議頭為no-cache,則表現為直接從後臺請求資料
NSURLRequestReloadIgnoringLocalCacheData :忽略本地快取,直接從後臺請求資料
NSURLRequestReloadIgnoringLocalAndRemoteCacheData :忽略本地快取資料、代理和其他中介的快取,直接從後臺請求資料
NSURLRequestReturnCacheDataElseLoad :優先從本地拿資料,且忽略請求生命時長和過期時間。但是如果沒有本地cache,則請求源資料
NSURLRequestReturnCacheDataDontLoad :只從本地拿資料
NSURLRequestReloadRevalidatingCacheData :每次必須重新驗證cache