如何判断NSURLResponse是否来自缓存?

19
我将NSURLCache设置在一个特定的文件夹(../../Application Support/Offline),这样它就不会被操作系统随机删除,然后我使用NSURLRequestReturnCacheDataElseLoad策略发送NSURLRequest请求。
我应该如何确定由符合NSURLConnectionDelegate协议的类处理的响应来自缓存还是网络?
1个回答

8

这里有一篇关于该问题的好文章:

http://andrewmarinov.com/ioss-corenetwork-lying/

基本上,从NSHTTPURLResponse中状态码始终为200。

因此,如果您真的需要知道,您可以在发出请求之前检查项目是否在缓存中。

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;

如果是这样,请保存修改后的 'etag' 或 'modified-date' 标头。
NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];

然后,在响应处理程序中检查etag或修改日期是否相同。如果是,则响应来自缓存!


那基本上就是我最终所做的。 - greg3z
3
你总是可以回答自己的问题!这会为我节省一小时的时间;-) - Nick Hingston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接