gpt4 book ai didi

ios - 我怎么知道要使用哪个 NSURLRequest CachePolicy

转载 作者:可可西里 更新时间:2023-11-01 16:56:11 27 4
gpt4 key购买 nike

我希望我的数据始终从服务器获取,除非没有网络。然后我想要返回缓存的数据。因此,无论是否有网络,我的用户总是会获取一些数据(而不是告诉他们:没有网络连接等)。那么我应该使用哪个 NSURLRequestCachePolicy?

最佳答案

“我希望我的数据始终从服务器获取,除非没有网络。然后我希望返回缓存的数据。”

缓存策略常量are described here .

没有任何缓存策略会执行您描述的操作。如果服务器不可用,您可以通过从缓存中提供响应来实现自己的缓存逻辑(但是,这并不是真正推荐的做法)。

您的问题没有描述您是否希望将缓存的响应持久保存到磁盘。 NSURLCache 默认情况下只缓存在内存中,你可以创建一个 NSURLCache 的实例来轻松使用磁盘:

  cache = [[NSURLCache alloc] initWithMemoryCapacity:[(1024*1024*512) diskCapacity:(1024*1024*1024 * 100) diskPath:@"Cache.db"]:

缓存可以设置为全局共享的URL缓存,也可以配合NSURLSessionConfiguration使用。

当您决定您的应用程序不应尝试联系服务器时,您可以通过asking it for a cached response for a request 直接访问缓存。 :

cachedResponse = [cache cachedResponseForRequest:request];

缓存的响应是一个 NSCachedURLResponse,它包含与该请求的响应的缓存表示相关联的 NSDataNSURLResponse。然后,您可以将这些对象提供给您为处理来自服务器的响应而实现的任何方法。

也就是说,使用 NSURLRequestUseProtocolCachePolicy 的默认缓存策略几乎总是最好的选择,而不是实现自己的缓存或更改请求的缓存策略。当服务器响应 HTTP 请求时,响应包括有关响应有效时间和条件的信息。例如,响应可能包含这样的 header :

Cache-control: max-age:3600

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

假设在我们的示例中,用户在 3600 秒的时间段内处于“离线”状态。如果他们发出相同的请求,应用程序将使用缓存的响应。如果 3600 秒周期已过,则上下文已过期无效。服务器已经告诉客户端,如果 3600 秒过去了,它不应该使用这个响应。如果客户端处于“离线”状态,则客户端将无法联系服务器使用缓存 - 这正是您想要的。如果响应是“永远”不应该改变的东西,客户端可以缓存并永久保留,服务器会表明(在这种情况下,可能通过在响应中发送 max-age 年值)。

关于ios - 我怎么知道要使用哪个 NSURLRequest CachePolicy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com