iOS网络缓存一般谈

当然,中国当下依然不是有很多流量土豪出现。

一些理论和资料献上(多谢这些大牛的奉献精神):

iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

IOS缓存机制详解

iOS http缓存机制

NSURLCache

前提是,要想好只在前端缓存还是前后端一起配合缓存。以上的几篇文章已经非常明了的介绍了缓存的处理。

当然,首先设置 NSURLCache
NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];
其次,最好是能够配合检测网络状态

我本人觉得RealReachability这个库要比AFNetWorking本身自带的网络状态检测库要更加好用一些。而且配置和使用方法在github上说的也很详细。

最后,分个情况搞一搞
  1. 只考虑单独的在客户端设置要如何使用。
iOS网络缓存一般谈_第1张图片
请求.png

如果你只想简单的实现离线浏览在线可更新的需求,那这一步基本上已经可以实现了。

  1. 与服务器搭配。

这种情况常见在第一步已经满足的情况下,还想在进一步优化一下。那么我觉得现在cache-control与etag这两个角色是时候可以闪亮登场了。

可以查阅以下文章了解下:

“Cache-control”常见的取值

ETag使用效果对比及经验分享(附ETag配置教程)

下图大致说明基本流程:
iOS网络缓存一般谈_第2张图片
网络请求服务.png

#######客户端处理与注意如下:

  1. 修改有网络时:NSURLRequestCachePolicy为NSURLRequestUseProtocolCachePolicy
  2. 遇到no-cache的response自然不会缓存。
  3. 保证每次请求都携带ETag

1和2两种情况搭配可以实现如下功能:
  1. 有网络或者服务器可请求的情况下,可以请求服务器数据,如遇code:304则表示请求的API数据没有发生改变,减少网络传输量,只在数据发生变化的时候才返回数据。
  2. 无网络或者服务器不可连接的情况,只浏览本地数据打到离线阅读的体验。

有问题的地方,大牛们快来指正(跪求。。。)

你可能感兴趣的:(iOS网络缓存一般谈)