AF网络和缓存

Posted

技术标签:

【中文标题】AF网络和缓存【英文标题】:AFNetworking and caching 【发布时间】:2013-04-15 22:53:46 【问题描述】:

我正在下载要缓存的 WMS 切片。我正在使用包含 NSURLCache 的 AFNetworking。来自服务器的响应在标头中不包含 Cache-Control 协议。

我向服务器人员询问了这个问题,但对服务器端缓存控制不熟悉。目前,他正忙于其他工作。我是否需要他来实现缓存控制,或者我可以强制 NSURLCache 在没有响应头信息的情况下缓存它们?

NSURLCache 是持久的吗?如果是这样,我该如何清除缓存?瓦片需要在每个会话中检索,并且不能持久化。

或者我应该创建自己的缓存?

【问题讨论】:

【参考方案1】:

当您激活 NSURLCache 时,它​​将适用于任何基于 NSUrlRequest 的请求(如 AFNetworking)。激活 NSURLCache 的那一刻,您可以指定它的最大大小。您还可以通过调用 removeAllCachedResponses 或 removeCachedResponsesForRequest 方法来清除缓存。如果服务器没有发送任何缓存控制信息,那么缓存仍然会缓存文件。如果您想完全控制缓存,您可以创建自己的缓存。如果您想查看示例代码,请查看https://github.com/evermeer/EVURLCache

【讨论】:

好的,很高兴听到。再次与服务器人员交谈,他似乎对实现缓存控制并不太兴奋。所以,这看起来很基础,但是从 NSURLCache 中检索是如何工作的呢?它只是在后端处理吗?我发出请求,NSURLRequest 在本地检查是否如此,在没有我做任何额外事情的情况下返回它? 在应用启动时,您只需初始化缓存。从那一刻起,所有的 NSURL 请求都将由 NSURLCache 处理。当你创建一个 NSURLrequest 时,你可以指定像 NSURLCacheStorageAllowed 这样的缓存策略。

以上是关于AF网络和缓存的主要内容,如果未能解决你的问题,请参考以下文章

使用 Almofireimage 下载然后缓存单元格图像

缓存策略

Glide图片加载的用法介绍和三级缓存实现

如何使用 Alamofire 从缓存和网络加载数据?

来自未来的缓存 Caffeine,带你揭开它的神秘面纱

nginx压缩,缓存