iOS - 缓存是如何工作的?

iOS - How does caching work?

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

远程源一天更新几次。

我只想:

// 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 and from NSHipster 那里了解到 NSURLCache

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

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

感谢任何建议!

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

当你发出请求时,headers像If-Modified-Since一样会通过比较缓存数据的时间戳来判断数据是否传输。

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

总而言之,NSURLCache 可以满足您的需求,但实施将基于 NSURLCache 的配置、您如何发出请求、如何在响应中实施缓存控制以及您是否覆盖 headers.

给出的策略