有时,我只想在使用URLSession时才从缓存中获取数据。例如,在UITableView中快速滚动时,我希望显示缓存中已经存在但不触发任何HTTP请求的图像。图像只是一个例子,可以是任何东西。
因此,我目前正在研究URLSession的CachePolicy,但它不支持只从缓存获取有效(未过期)数据的选项。
我可以自己查看URLCache,但这当然也会返回可能过期的数据。有什么API可以验证CachedURLResponse吗?因为那样我就可以自己做了。还是我必须实现自我验证。
发布于 2018-12-02 05:09:55
这是一个相当不寻常的要求。通常,您要么编写代码以脱机模式操作(在这种情况下,您希望从缓存中提取缓存结果是否仍然有效),要么您处于联机状态(在这种情况下,您希望获取无效的新数据)。
如果您不触发网络请求,我将鼓励您认真考虑是否真的要强制进行缓存验证。
也就是说,如果你真的想要那样的行为,有两种方法可以做到:
NSURLRequestReturnCacheDataDontLoad并亲自验证缓存响应的历史。NSURLRequestUseProtocolCachePolicy,在该会话中安装一个自定义NSURLProtocol子类,该子类覆盖initWithTask:cachedResponse:client:和startLoading,并在提供的客户机上调用startLoading方法顶部的URLProtocol:didFailWithError:。第二种方法可能是最好的选择,因为您不必担心了解缓存验证的所有深奥的规则。通过使实际加载失败,缓存将正常工作,但一旦实际开始发出网络请求,您的自定义协议就会防止这种情况发生。而且,由于您将只在特定的会话中注册协议(通过会话配置上的protocolClasses数组),它不会破坏其他会话中的网络。
https://stackoverflow.com/questions/53408631
复制相似问题