美文网首页计算机技术一锅炖OC进化iOS Developer
一篇文章带你掌握webView+常用 缓存实现

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

作者: 江水东流 | 来源:发表于2016-12-23 14:40 被阅读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;

    • 数据储存
      YYCache可以储存遵守NSCopying协议的数据
      [cache setObject:requestData forKey:cacheKey];

    • 数据读取

    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里面的方法是按顺序调用的

    • (BOOL)canInitWithRequest:(NSURLRequest *)request
      这个方法主要是说明你是否打算处理对应的request,如果不打算处理,返回NO,URL Loading System会使用系统默认的行为去处理;如果打算处理,返回YES,用于过滤你不想做缓存的url.
    AFN默认这里都返回NO,你想自己的请求自动缓存的话,自己写一个网络请求类,demo里我写了一个简单的.

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

    • (void)connectionDidFinishLoading:(NSURLConnection *)connection
      在这个方法里进行数据保存

    详细的内容看代码就行.

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/mpvnmttx.html