AFNetworking - 请求和图像的缓存时间如何?

时间:2014-01-02 15:29:42

标签: ios image caching request afnetworking

我正在使用iOS的AFNetworking框架。

  1. 缓存由HTTP响应标头控制?
    • 如果是,则它基于标题' Cache-Control '和' Expires '用于正常请求?
    • 如果没有,缓存如何工作?
  2. 您可以自定义缓存时间并在1天内修复,无论HTTP响应标头如何?
  3. 如果有图像缓存,它会存储在磁盘上还是保存到内存中?
  4. 当设备没有互联网连接时,缓存请求会有效吗?
    • 用户发出请求,但设备未显示互联网连接,请求已暂停。您可以在设备返回其互联网连接时忽略相同的请求吗?
  5. 我的应用程序使用数据库脱机工作的唯一方法,还是可以基于此框架的系统缓存?
  6. 您可以更改请求的超时而无需自定义“ NSURLRequest ”?

1 个答案:

答案 0 :(得分:4)

  

缓存由HTTP响应头控制吗?

是;这就是NSURLCache决定是否以及缓存数据的时间。

  

它基于标题'Cache-Control'和'Expires'用于正常请求?

是的,但值得注意的是,如果缓存周期太短,它有时会忽略缓存请求。不幸的是,这不是记录在案的行为。

  

您可以自定义缓存时间并在1天内修复它,无论HTTP响应标头是什么?

为了更好地控制缓存,您可以使用SDURLCache:https://github.com/rs/SDURLCache AFNetworking在其常见问题解答中推荐此库。

  

如果有图像缓存,它会存储在磁盘上还是保存到内存中?

对于一般请求,这可由开发人员配置(请参阅NSURLCache文档)。

对于UIImageView + AFNetworking,除了提供内存缓存的NSURLCache之外,还使用NSCache。

  

当设备没有互联网连接时,缓存请求会起作用吗?

是的,但缓存可以随时失效,所以不要依赖它。

  

用户发出请求,但设备未显示互联网连接,请求已暂停。当设备返回到互联网连接时,您可以忽略相同的请求吗?我的应用程序使用数据库脱机工作的唯一方法,还是可以基于此框架的系统缓存?

您可以在获得NSURLRequest后手动检查缓存的响应:

NSMutableURLRequest *request = [myHTTPClient requestWithMethod:@"GET" path:path parameters:parameters];
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
if (cachedResponse)
{
    // Use response
}
  

您可以更改请求的超时而无需自定义“NSURLRequest”?

不是开箱即用,但您可以覆盖在子类中创建NSMutableURLRequest的方法,以便为每个子类更改它。此方法为requestWithMethod:path:parameters: