自iOS8以來新出的WKWebView庆寺,大大優(yōu)化了UIWebView的內(nèi)存飆升問題恋技,使得開發(fā)者迫不及待的用它來替換掉UIWebView奸焙,iOS8剛出,作者我就趕緊把項目里的webView都替換成WKWebView了哀澈,然而....當(dāng)我替換完后發(fā)現(xiàn)...我去!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內(nèi)的緩存割按,依舊沒有清除掉,該有的Cookie還有磷籍,該有測cache還是存在适荣!弄得小編我不是一般的郁悶,google院领,stackoverflow弛矛, 無果,最終還是淪落版本回退的下場~~~比然!
然而我們等到了iOS9U擅ァ!强法!沒錯万俗!WKWebView的緩存清除API出來了!代碼如下:
這是刪除所有緩存和cookie的
NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
//// Date from
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
//// Execute
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
// Done
}];
當(dāng)然饮怯,你也可以選擇只刪除部分
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是一個數(shù)組闰歪,可以放進數(shù)組的值為:
/*
WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeMemoryCache,
WKWebsiteDataTypeLocalStorage,
WKWebsiteDataTypeCookies,
WKWebsiteDataTypeSessionStorage,
WKWebsiteDataTypeIndexedDBDatabases,
WKWebsiteDataTypeWebSQLDatabases
*/
這樣你就可以按你自己要求清除些什么啦!
(最后PS:WKWebView清除緩存只能iOS9使用蓖墅,低于iOS9運行會崩潰哦库倘!所以,為了適配iOS7和iOS8论矾,還是要做版本判斷于樟,相信WKWebView取代UIWebView是指日可待的!)