gpt4 book ai didi

swift - 仅 URLSession 缓存

转载 作者:行者123 更新时间:2023-11-28 07:35:05 25 4
gpt4 key购买 nike

有时候我只想在使用URLSession时才从缓存中获取数据。例如,当在 UITableView 中快速滚动时,我想显示缓存中已有的图像,但不触发任何 HTTP 请求。图片只是一个例子,可以是任何东西。

所以我目前正在研究 URLSession 的 CachePolicy,但它不支持仅从缓存中获取有效(未过期等)数据的选项。

我可以自己查看 URLCache,但这当然也会返回可能已过期的数据。是否有一些 API 可以验证 CachedURLResponse?因为那时我可以自己做。还是我必须自己实现验证。

最佳答案

这是一个相当不寻常的请求。通常,您要么编写代码以在离线模式下运行(在这种情况下,无论缓存结果是否仍然有效,您都希望从缓存中提取数据),要么您在线(在这种情况下,您希望获取新数据,如果它无效)。

如果您不触发网络请求,我会鼓励您认真考虑是否真的要强制执行缓存验证。

也就是说,如果您真的想要这种行为,有两种方法可以做到:

  • 使用 NSURLRequestReturnCacheDataDontLoad 并自行验证缓存响应的年龄。
  • 在自定义 session 中执行请求,使用 NSURLRequestUseProtocolCachePolicy,并在该 session 中安装自定义 NSURLProtocol 子类,该子类覆盖 initWithTask:cachedResponse:client:startLoading,并在提供的客户端的 startLoading 方法顶部调用 URLProtocol:didFailWithError:

第二种方法可能是最佳选择,因为您不必担心了解缓存验证的所有深奥规则。通过使实际加载失败,缓存将正常工作,但一旦它真正开始发出网络请求,您的自定义协议(protocol)就会阻止这种情况发生。并且因为您将仅在该特定 session 中注册协议(protocol)(通过 session 配置中的 protocolClasses 数组),它不会中断其他 session 中的网络连接。

关于swift - 仅 URLSession 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com