计算机技术一锅炖OC进化iOS Developer

一篇文章带你掌握webView+常用 缓存实现

2016-12-23  本文已影响362人  江水东流

现在很多应用需要用到离线缓存,以前我尝试过用fmdb数据库做缓存,可是感觉太复杂,用coreData呢,要建立好多文件,有不少设置,也不简单.后来发现了YYCache,很好用,现在我做两个demo,一个是用AFN+YYCache实现离线缓存,一个是用NSURLProtocol+YYCache实现包括webView在内的缓存,我还写了一些好用的工具类,你要想快速掌握缓存,看我的demo就行了.

AFN+YYCache实现离线缓存 github地址
NSURLProtocol+YYCache缓存github地址

AFN+YYCache实现离线缓存

YYCache一般用法如下:

YYCache cache = [[YYCache alloc] initWithName:kCachePath] ;
cache.diskCache.ageLimit = 3600
12*7;//保存的最大天数单位秒 隔几天删除一次重新请求
// cache.diskCache.costLimit 允许占用的最大容量单位是db
cache.diskCache.totalCost : 占用的容量单位是db
cache.memoryCache.shouldRemoveAllObjectsOnMemoryWarning = YES;
cache.memoryCache.shouldRemoveAllObjectsWhenEnteringBackground = YES;

id cacheData = [cache objectForKey:cacheKey];
id myResult = [NSJSONSerialization JSONObjectWithData:cacheData options:NSJSONReadingMutableContainers error:nil];

我写了一个afn网络请求的工具类,用这个工具类请求的自然缓存了,一般用一个key存储不同的请求,我用url当做key.

我还写了一个工具类,来计算设备可用容量,缓存占用空间等,放进去直接可用.

NSURLProtocol+YYCache实现webView缓存

NSURLProtocol能够让你去重新定义苹果的URL加载系统的行为,URL Loading System里有许多类用于处理URL请求.通过它和YYCache做网络缓存很方便,
网页请求如果是重定向的话其实是两次请求,第一次请求服务器给浏览器一个url,浏览器再请求这个url,要对重定向特殊处理.比如我们手机访问 一个网址"www.163.com",服务器会先返回一个适合手机的url"3g.163.com",浏览器会自动再次请求这个url.

屏幕快照 2016-12-16 11.00.15.png

加载url时候会调用NSURLProtocol的很多方法,demo里面的方法是按顺序调用的

AFN默认这里都返回NO,你想自己的请求自动缓存的话,自己写一个网络请求类,demo里我写了一个简单的.

(void)startLoading
//这两个方法主要是开始和取消相应的request,而且需要标示那些已经处理过的request。在里面先看是否有缓存再进行其他操作.

详细的内容看代码就行.

上一篇 下一篇

猜你喜欢

热点阅读