iOS-WKWebView缓存并保证实时性
前言 说到WKWebView的缓存,我之前也写过一篇关于UIWebView的缓存的,文章地址如下:
《iOS-UIWebview缓存并保证实时性》
但是这个方法对于WKWebView就失去了效果,后来公司的项目全部改为WKWebView,至于WKWebView的好处,这边就不过多叙述了;上面的方法要是在WKWebView上就失效了,后来我也修改了新的方案,自己的闲暇时间一直在维护自己的几款软件ZFJObsLib、ZFJPyMix,所以一直没时间总结优化一下,在此我对ZFJCacheProtocol重新优化了一下,大家也可以根据自己的理解和需求自行优化设计;在UIWebView的时候我是缓存全部数据的,在这里开发者可以自行选择缓存的类型!
具体流程图如下:
文章图片
如果想详细了解NSURLRequest的相关的缓存机制,可以看《iOS-UIWebview缓存并保证实时性》
详细API如下:
【iOS-WKWebView缓存并保证实时性】
文章图片
ZFJWebCache
使用效果
文章图片
使用教程
只需要在需要监听的页面开启网络监听就可以了,在不需要监听的时候取消监听即可,如下:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//开始监听缓存数据
[ZFJCacheProtocol startMonitorRequest:ZFJCacheAllType];
}- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//在不需要用到webview的时候即使的取消监听
[ZFJCacheProtocol cancelMonitorRequest];
}
自定义配置
1.自定义缓存类型
ZFJWebCache主要根据MIMEType可以对缓存的数据类型进行区分,具体指出的缓存类型如下:
typedef NS_ENUM(NSInteger, ZFJCacheType) {
ZFJCacheAllType= 1 << 0,//缓存全部
ZFJCacheImageType= 1 << 1,//缓存图片
ZFJCacheVideoType= 1 << 2,//缓存视频
ZFJCacheAudioType= 1 << 3,//缓存音频
ZFJCacheTextType= 1 << 4,//缓存text
ZFJCacheMessageType= 1 << 5,//缓存message
ZFJCacheX_WorldType= 1 << 6,//缓存x-world
ZFJCacheApplicationType = 1 << 7,//缓存application
ZFJCacheNoneType= 1 << 8,//未知类型
};
比如你只想缓存image使用如下:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//开始监听缓存数据
[ZFJCacheProtocol startMonitorRequest:ZFJCacheImageType];
}
2.设置缓存过期时间
ZFJWebCache的默认过期时间是一小时(3600s),如果想自定义缓存过期时间可设置如下:
// 设置缓存过期时间
[ZFJCacheConfig instance].updateInterval = 1200;
3.设置忽略url
NSArray *ignoreUrlArray = @[@"http://www.baidu.com"];
[ZFJCacheConfig instance].ignoreUrlArray = ignoreUrlArray;
4.其他配置API如下
//
//ZFJCacheConfig.h
//Ahaschool
//
//Created by ZFJMBPro on 2020/1/13.
//Copyright ? 2020 ahaschool. All rights reserved.
//#import
#import "ZFJMIMEType.h"@interface ZFJCacheConfig : NSObject+ (instancetype)instance;
/// 上一次url请求时间
@property (readwrite, nonatomic, strong) NSDictionary *lastRequestDict;
/// 支持的缓存类型
@property (nonatomic,assign) ZFJCacheType cacheType;
/// 相同的Url请求缓存时间间隔(默认3600s)
@property (readwrite, nonatomic, assign) NSInteger updateInterval;
/// 为NSURLSession配置一些请求所需要的策略
@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *config;
/// 请求任务队列
@property (readwrite, nonatomic, strong) NSOperationQueue *forgeroundNetQueue;
/// 缓存任务队列
@property (readwrite, nonatomic, strong) NSOperationQueue *backgroundNetQueue;
/// 忽略的url链接
@property (nonatomic, strong) NSArray *ignoreUrlArray;
/// 清空内存中的url记录(收到内存警告的时候可以调用这个方法清空内存中的url记录)
- (void)clearUrlDict;
/// 获取缓存路径
- (NSString *)documentPath;
/// 是否支持缓存
- (BOOL)isSupportCache:(NSString *)mimeType;
@end
源码 GTIEE:https://gitee.com/zfj1128/ZFJWebCache
结束语 欢迎各位大佬提供宝贵的建议和意见,也欢迎大家进群或加本人QQ一起交流学习!
推荐阅读
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 抱怨并没有任何意义
- 读猫文收获
- 喜剧演员,小丑一样的活着
- 如果鸽子会说话(二十三)
- 排序(归并排序)
- 逃避问题并不能让问题消失
- 羁旅.和陆游临安春雨初霁并步原韵(旧体诗)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 【剽悍晨读感悟】0714并不是要把一天过成48小时的样子