[英]How do I know which NSURLRequestCachePolicy to use
我希望我的数据总是从服务器中获取,除非没有网络。 然后我要返回缓存的数据。 因此,无论是否有网络,我的用户总会得到一些数据(而不是告诉他们:不是网络连接之类的)。 那么我应该使用哪个NSURLRequestCachePolicy呢?
“我希望我的数据总是从服务器中获取,除非没有网络。然后,我希望返回缓存的数据。”
缓存策略常量在此处描述 。
没有任何缓存策略执行您描述的操作。 如果服务器不可用,则可以通过将响应提供到缓存之外来实现自己的缓存逻辑(但是,实际上不建议这样做)。
您的问题并未描述您是否希望将缓存的响应保存到磁盘。 NSURLCache默认情况下仅缓存内存,您可以创建一个NSURLCache实例,该实例可以轻松使用磁盘:
cache = [[NSURLCache alloc] initWithMemoryCapacity:[(1024*1024*512) diskCapacity:(1024*1024*1024 * 100) diskPath:@"Cache.db"]:
可以将缓存设置为全局共享URL缓存,也可以将其与NSURLSessionConfiguration
一起使用。
当您决定您的应用程序不应尝试与服务器联系时,可以通过请求缓存请求的响应来直接访问缓存:
cachedResponse = [cache cachedResponseForRequest:request];
缓存的响应是NSCachedURLResponse
,其中包含与该请求的响应的缓存表示关联的NSData
和NSURLResponse
。 然后,您可以将那些对象分配给已实现的用于处理服务器响应的任何方法。
也就是说,使用NSURLRequestUseProtocolCachePolicy
的默认缓存策略几乎总是最佳选择,而不是实施自己的缓存或更改请求的缓存策略。 当服务器响应HTTP请求时,响应中包含有关响应将持续多长时间以及在什么条件下有效的信息。 例如,响应可能包含这样的标头:
Cache-control: max-age:3600
这是服务器告诉客户端提供的响应在3600秒内有效。 NSURLRequestUseProtocolCachePolicy
理解这些值以及控制其在客户端上使用的规则。 如果您在这3600秒内从客户端发出相同的请求,则Foundation将为您的应用程序提供缓存的响应,而不是与服务器联系。 “拥有”客户端所请求数据的服务器是唯一可以正确推断响应有效性的一方。
因此,在我们的示例中,假设用户在这3600秒内处于“离线”状态。 如果他们发出相同的请求,则应用程序将使用缓存的响应。 如果3600秒已过去,则上下文过期且无效 。 服务器已告知客户端,如果已过去3600秒,则不应使用此响应。 如果客户端处于“脱机”状态,则客户端将无法联系服务器或使用缓存-这正是您想要的。 如果响应是应该“永不”更改的内容,则客户端可以缓存并永久保存,则服务器将表明这一点(在这种情况下,可能通过在响应中发送年的最大寿命值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.