[iOS-Foundation] Networking Cache

NSHipster-NSURLCache

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 來緩存數據。通過NSURLSessionConfigurationNSURLRequest對象中設置的
NSURLRequestCachePolicy影響著請求如何使用緩存的行為。
NSURLRequestCachePolicy的可選項包括:

// 默認值,使用協議本身的緩存邏輯。
NSURLRequestUseProtocolCachePolicy
// 不使用現有緩存,數據需要從原始地址加載。
NSURLRequestReloadIgnoringCacheData
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么從原始地址加載數據。
NSURLRequestReturnCacheDataElseLoad
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么放棄從原始地址加載數據,請求視為失敗。
NSURLRequestReturnCacheDataDontLoad

對于是否存儲響應以及在NSURLRequestUseProtocolCachePolicy下是否使用緩存響應,如 HTTP 或 HTTPS 協議,受 header 中緩存相關的字段影響(Cache-ControlLast-ModifiedEtag)。

代理NSURLSessionDataDelegate中的方法
URLSession:dataTask:willCacheResponse:completionHandler:使用戶有機會在獲取數據后修改緩存行為。方法中要執行 block 參數 completionHandler,如果緩存則傳入一個NSCachedURLResponse對象,若不想緩存可傳入 nil。當返回的響應為緩存中的時候,則不調用該方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容