我正在使用iOS的AFNetworking框架。
答案 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:
。