繁体   English   中英

我怎么知道要使用哪个NSURLRequestCachePolicy

[英]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 ,其中包含与该请求的响应的缓存表示关联的NSDataNSURLResponse 然后,您可以将那些对象分配给已实现的用于处理服务器响应的任何方法。

也就是说,使用NSURLRequestUseProtocolCachePolicy的默认缓存策略几乎总是最佳选择,而不是实施自己的缓存或更改请求的缓存策略。 当服务器响应HTTP请求时,响应中包含有关响应将持续多长时间以及在什么条件下有效的信息。 例如,响应可能包含这样的标头:

Cache-control: max-age:3600

这是服务器告诉客户端提供的响应在3600秒内有效。 NSURLRequestUseProtocolCachePolicy理解这些值以及控制其在客户端上使用的规则。 如果您在这3600秒内从客户端发出相同的请求,则Foundation将为您的应用程序提供缓存的响应,而不是与服务器联系。 “拥有”客户端所请求数据的服务器是唯一可以正确推断响应有效性的一方。

因此,在我们的示例中,假设用户在这3600秒内处于“离线”状态。 如果他们发出相同的请求,则应用程序将使用缓存的响应。 如果3600秒已过去,则上下文过期无效 服务器已告知客户端,如果已过去3600秒,则不应使用此响应。 如果客户端处于“脱机”状态,则客户端将无法联系服务器使用缓存-这正是您想要的。 如果响应是应该“永不”更改的内容,则客户端可以缓存并永久保存,则服务器将表明这一点(在这种情况下,可能通过在响应中发送年的最大寿命值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM