版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337777
最近产品经理在验收项目,在验收过程中发现了一个问题:网页中的数据存在缓存。
网页中加载的是一张图片,在后台将加载的图片换掉的时候再在App中加载此网页,发现展示的图片还是之前的图片,并没有更新,而且多次重新加载网页显示的还是之前的图片,说明缓存很严重。于是查阅资料进行缓存的清除。
先说说UIWebView中缓存的清除,代码只有一句:
[NSURLCachesharedURLCacheremoveAllCachedResponses];
再说WKWebView中缓存的清除:
NSArray * types =@WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache;
NSSet *websiteDataTypes = NSSetsetWithArray:types;
NSDate *dateFrom = NSDatedateWithTimeIntervalSince1970:0;
[WKWebsiteDataStoredefaultDataStoreremoveDataOfTypes:websiteDataTypesmodifiedSince:dateFromcompletionHandler:^{
}];
其中types数组中的内容是可以选择的一些类型,还是选择清除cookie。
注意:只有在iOS9之后WKWebView才有清除缓存的方法,在写代码的时候切记对系统版本进行判断。
}];
if ([[UIDevicecurrentDevicesystemVersion]intValue ] >8) {
NSArray * types =@WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache; // 9.0之后才有的
NSSet *websiteDataTypes = NSSetsetWithArray:types;
NSDate *dateFrom = NSDatedateWithTimeIntervalSince1970:0;
[WKWebsiteDataStoredefaultDataStoreremoveDataOfTypes:websiteDataTypesmodifiedSince:dateFromcompletionHandler:^{
}];
}else{
NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) objectAtIndex:0;
NSString *cookiesFolderPath = libraryPathstringByAppendingString:@"/Cookies";
NSLog(@"%@", cookiesFolderPath);
NSError *errors;
[NSFileManagerdefaultManagerremoveItemAtPath:cookiesFolderPatherror:&errors];
}
增加内容:
使用UIWebView加载页面的时候最理想的情况是:资源文件没有更新,就只加载缓存文件,如果有更新就第一时间使用新的文件。
我们可以使用一个类来实现,这个类也是我在网上找的,类名:
JWNetAutoCache,大家也可以点进去看这个类实现该效果的一个思路。
增加内容:
在iOS8上还会导致崩溃的代码:
/*
导致iOS8奔溃的代码
*/
self.webView.allowsBackForwardNavigationGestures = YES;
self.webView.allowsBackForwardNavigationGestures = NO;
这是属性表示是否开启网页左、右滑前进倒退。