[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。当返回的响应为缓存中的时候,则不调用该方法。

你可能感兴趣的:([iOS-Foundation] Networking Cache)