NSURLCache 通過保存NSURLRequest
對象和其相應的NSCachedURLResponse
對象,實現了對網絡請求的緩存。它支持對內存緩存空間和硬盤緩存空間的設置,以及硬盤緩存路徑的設置。
創建
單例sharedURLCache
可以直接使用,也可以通過方法
initWithMemoryCapacity:diskCapacity:diskPath
自定義。如在
NSURLSessionConfiguration
配置中,default session 會使用單例,而 ephemeral session 則使用自定義的只保存在內存中的實例。
用量
currentDiskUsage
,當前可用硬盤緩存空間,只讀,以字節為單位。
diskCapacity
,硬盤緩存空間,以字節為單位。
currentMemoryUsage
,當前可用內存緩存空間,只讀,以字節為單位。
memoryCapacity
,內存緩存空間,以字節為單位。
存儲
- cachedResponseForRequest:
- storeCachedResponse:forRequest:
- removeAllCachedResponses
- removeCachedResponseForRequest:
- getCachedResponseForDataTask:completionHandler:
- removeCachedResponseForDataTask:
- removeCachedResponsesSinceDate:
- storeCachedResponse:forDataTask:
NSCachedURLResponse
NSCachedURLResponse
是對要緩存的響應的封裝,它包括了以下幾個屬性:
-
data
,表示響應實體的NSData
對象。 -
response
,表示響應的NSURLResponse
對象。 -
storagePolicy
,枚舉類型NSURLCacheStoragePolicy
,表示NSURLCache
保存時支持的策略。
NSURLCacheStorageAllowed
,同時支持保存到內存和硬盤。
NSURLCacheStorageAllowedInMemoryOnly
,只支持保存到內存。
NSURLCacheStorageNotAllowed
,不能緩存。 -
userInfo
,存儲額外信息的字典。
URL Loading System 中的應用
通過 URL Loading System 發起網絡請求獲取數據時,系統會使用
NSURLSessionConfiguration
中設置的NSURLCache
屬性 URLCache 來緩存數據。通過NSURLSessionConfiguration
或NSURLRequest
對象中設置的
NSURLRequestCachePolicy
影響著請求如何使用緩存的行為。
NSURLRequestCachePolicy
的可選項包括:
// 默認值,使用協議本身的緩存邏輯。
NSURLRequestUseProtocolCachePolicy
// 不使用現有緩存,數據需要從原始地址加載。
NSURLRequestReloadIgnoringCacheData
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么從原始地址加載數據。
NSURLRequestReturnCacheDataElseLoad
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么放棄從原始地址加載數據,請求視為失敗。
NSURLRequestReturnCacheDataDontLoad
對于是否存儲響應以及在NSURLRequestUseProtocolCachePolicy
下是否使用緩存響應,如 HTTP 或 HTTPS 協議,受 header 中緩存相關的字段影響(Cache-Control
、Last-Modified
、Etag
)。
代理NSURLSessionDataDelegate
中的方法
URLSession:dataTask:willCacheResponse:completionHandler:
使用戶有機會在獲取數據后修改緩存行為。方法中要執行 block 參數 completionHandler,如果緩存則傳入一個NSCachedURLResponse
對象,若不想緩存可傳入 nil。當返回的響應為緩存中的時候,則不調用該方法。