为什么需要缓存?
-
同一个URL请求多次,浪费流量。
App离线也能查看
-
加快程序响应速度,提升用户体验。如果缓存中有数据,直接就用了,不会访问网络
首次使用,没有网络数据,不至于空页面,预先加载一些内容
怎么设计?
有系统自带的吗?
NSCache和NSURLCache是系统自带的缓存
NSCache 是苹果提供的一个简单的内存缓存,它有着和 NSDictionary 类似的 API,不同点是它是线程安全的,并且不会 retain key。在AFNetworking中,使用它来作为图片缓存。
NSURLCache是基于 SQLite 数据库的磁盘缓存。
POST请求不能被缓存,只有 GET 请求能被缓存。
HTTP协议deresponse头中的cache-control字段public,max-age=5,表示缓存所有内容,缓存5秒失效
借助ETag或Last-Modified判断文件缓存是否有效
Last-Modified。如果资源没更新,服务器响应304,客户端使用缓存。有数据返回的响应200
AFNetworking支持使用NSCache和NSURLCache作为网络缓存方案。
iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
选哪个第三方库?
和YYMode一样,YYCache作者写了一篇非常不错的介绍文章。YYCache 设计思路
源码地址YYCache