自iOS8以來新出的WKWebView,大大優化了UIWebView的內存飆升問題,使得開發者迫不及待的用它來替換掉UIWebView,iOS8剛出,作者我就趕緊把項目里的webView都替換成WKWebView了,然而....當我替換完后發現...我去!WKWebView并沒有清除緩存的功能,即使使用了以下代碼:
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
[storage deleteCookie:cookie];
}
NSURLCache * cache = [NSURLCache sharedURLCache];
[cache removeAllCachedResponses];
[cache setDiskCapacity:0];
[cache setMemoryCapacity:0];
WKWebView內的緩存,依舊沒有清除掉,該有的Cookie還有,該有測cache還是存在!弄得小編我不是一般的郁悶,google,stackoverflow, 無果,最終還是淪落版本回退的下場~~~!
然而我們等到了iOS9!!!沒錯!WKWebView的緩存清除API出來了!代碼如下:
這是刪除所有緩存和cookie的
NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
//// Date from
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
//// Execute
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
// Done
}];
當然,你也可以選擇只刪除部分
NSSet *websiteDataTypes
= [NSSet setWithArray:types];
//// All kinds of data
//NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
//// Date from
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
//// Execute
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
// Done
}];
types是一個數組,可以放進數組的值為:
/*
WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeMemoryCache,
WKWebsiteDataTypeLocalStorage,
WKWebsiteDataTypeCookies,
WKWebsiteDataTypeSessionStorage,
WKWebsiteDataTypeIndexedDBDatabases,
WKWebsiteDataTypeWebSQLDatabases
*/
這樣你就可以按你自己要求清除些什么啦!
(最后PS:WKWebView清除緩存只能iOS9使用,低于iOS9運行會崩潰哦!所以,為了適配iOS7和iOS8,還是要做版本判斷,相信WKWebView取代UIWebView是指日可待的!)