浅谈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的清除缓存问题】

    推荐阅读