我将NSURLCache设置在一个特定的文件夹(../../Application Support/Offline),这样它就不会被操作系统随机删除,然后我使用NSURLRequestReturnCacheDataElseLoad策略发送NSURLRequest请求。
我应该如何确定由符合NSURLConnectionDelegate协议的类处理的响应来自缓存还是网络?
我应该如何确定由符合NSURLConnectionDelegate协议的类处理的响应来自缓存还是网络?
这里有一篇关于该问题的好文章:
http://andrewmarinov.com/ioss-corenetwork-lying/
基本上,从NSHTTPURLResponse中状态码始终为200。
因此,如果您真的需要知道,您可以在发出请求之前检查项目是否在缓存中。
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;
NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];
然后,在响应处理程序中检查etag或修改日期是否相同。如果是,则响应来自缓存!