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.
给出的策略
我正在开发一个代表来自网络 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.