浅谈iOS中WKWebView和UIWebView的清除缓存问题
最近产品经理在验收项目,在验收过程中发现了一个问题:网页中的数据存在缓存。
网页中加载的是一张图片,在后台将加载的图片换掉的时候再在App中加载此网页,发现展示的图片还是之前的图片,并没有更新,而且多次重新加载网页显示的还是之前的图片,说明缓存很严重。于是查阅资料进行缓存的清除。
先说说UIWebView中缓存的清除,代码只有一句:
[[NSURLCachesharedURLCache]removeAllCachedResponses];
再说WKWebView中缓存的清除:
NSArray * types =@[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache];
NSSet *websiteDataTypes = [NSSetsetWithArray:types];
NSDate *dateFrom = [NSDatedateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStoredefaultDataStore]removeDataOfTypes:websiteDataTypesmodifiedSince:dateFromcompletionHandler:^{
}];
其中types数组中的内容是可以选择的一些类型,还是选择清除cookie。
注意:只有在iOS9之后WKWebView才有清除缓存的方法,在写代码的时候切记对系统版本进行判断。
}];
if ([[[UIDevicecurrentDevice]systemVersion]intValue ] >8) {
NSArray * types =@[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache];
// 9.0之后才有的
NSSet *websiteDataTypes = [NSSetsetWithArray:types];
NSDate *dateFrom = [NSDatedateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStoredefaultDataStore]removeDataOfTypes:websiteDataTypesmodifiedSince:dateFromcompletionHandler:^{
}];
}else{
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSString *cookiesFolderPath = [libraryPathstringByAppendingString:@"/Cookies"];
NSLog(@"%@", cookiesFolderPath);
NSError *errors;
[[NSFileManagerdefaultManager]removeItemAtPath:cookiesFolderPatherror:&errors];
}
增加内容:
使用UIWebView加载页面的时候最理想的情况是:资源文件没有更新,就只加载缓存文件,如果有更新就第一时间使用新的文件。
我们可以使用一个类来实现,这个类也是我在网上找的,类名:
JWNetAutoCache,大家也可以点进去看这个类实现该效果的一个思路。
增加内容:
在iOS8上还会导致崩溃的代码:
/*
导致iOS8奔溃的代码
*/
self.webView.allowsBackForwardNavigationGestures = YES;
self.webView.allowsBackForwardNavigationGestures = NO;
这是属性表示是否开启网页左、右滑前进倒退。
【浅谈iOS中WKWebView和UIWebView的清除缓存问题】
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理