如何知道NSURLSessionDataTask响应是否来自缓存?
问题描述:
我想,以确定是否从NSURLSessionDataTask
响应从缓存中来,或者从服务器如何知道NSURLSessionDataTask响应是否来自缓存?
我'端上来创建我NSURLSessionDataTask
从
request.cachePolicy = NSURLRequestUseProtocolCachePolicy;
答
两种简单的方式浮现在脑海中:
- 呼叫
[[NSURLCache sharedURLCache] cachedResponseForRequest:request]
您做出请求之前,存储缓存响应,然后做你完成接收数据后,再次和比较这两个缓存响应,看看他们是相同的。 - 使用
NSURLRequestReturnCacheDataDontLoad
缓存策略发起初始请求,如果失败,请使用更合理的策略发出第二个请求。
第一种方法通常比较可取,因为第二种方法将返回缓存中存在的数据,即使它是陈旧的。但是,在极少数情况下(例如离线模式),这可能就是您想要的,这就是我提到它的原因。
答
使用request.cachePolicy = NSURLRequestReloadIgnoringCacheData
代替。 NSURLRequestUseProtocolCachePolicy
是默认策略。基本上,这意味着缓存行为在NSURLProtocol
实现或从NSURLSessionConfiguration
缓存策略中定义。
答
如果您的信息需求只是出于好奇,您可以查看您的网络使用情况Xcode运行时网络metics。将策略更改为不同的设置并观察其差异。
我如何比较两个cachedResponse? –