iOS - 缓存如何工作?

标签 ios swift caching nsurlcache

我正在开发一个代表来自 Web API 的 JSON 的应用。

远程源一天更新几次。

我想做的就是:

// pseudo code

makeRequest() {   
 if (network not available){

  if (cache not exists) {
      showEmptyScreen()
  }else if (cache exists){
      useCache()
  }

 }else if (network available){

    if (cache not exists) {   
        loadFromRemote()
    }else if (cache exists){
        if (cache is older than latest update) {
           loadFromrRemote()
        }else {
           useCache()
        }
    } 
 }
}

我从 Apple 读到关于 NSURLCache 的内容来自NSHipster .

如果 NSURLCache 可以做我想做的事情,这仍然令人困惑。例如,如何在不真正下载任何东西的情况下检查是否有更新版本的数据?

如果 NSURLCache 无法处理检查,我怎么能自己编写代码呢?

感谢您的任何建议!

最佳答案

缓存的行为方式主要取决于您和您的服务器。 NSURLCache 不会自行做出决定,除非超出其容量限制时可能要做什么。

当您发出请求时,If-Modified-Since 等 header 将通过比较缓存数据的时间戳来确定数据是否已传输。

Cache-Control 等基于服务器的 header 也会影响数据在缓存中保持有效的时间。

总而言之,NSURLCache 可以处理您需要的内容,但实现将基于 NSURLCache 的配置、您如何发出请求、如何缓存控制的组合在响应中实现以及您是否覆盖 header 给出的策略。

关于iOS - 缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705022/

相关文章:

ios - --resource-rules 已在 mac os x >= 10.10 中弃用

ios - UItextView 不显示长文本

ios - 您是否可以在不请求设备和广播用户许可的情况下向附近的设备广播数据?

ios - 从 Firebase 上传和检索照片

caching - 典型的多核处理器是否具有从 L1 到 L2 的多个端口

ios - 自动化UI测试中如何上传记录

ios - 我似乎无法让物理机构在 Playground 内工作

swift - 仅更改 UINavigationBar 背景的 alpha?

angular - (Angular 4, AOT, cache refresh) 服务器发生代码变更时如何强制终端用户浏览器硬刷新?

javascript - AngularJS 缓存一个 REST 请求