緩存策略有以下四種方式:
默認(rèn)的NSURLRequest 緩存策略
后臺(tái)需要做響應(yīng)頭設(shè)置套么,否則無(wú)法進(jìn)行緩存。存在cache目錄碳蛋,n磁盤(pán)緊張會(huì)被清除
NSURLCache
和上面類(lèi)似胚泌。可以不需要后臺(tái)設(shè)置也能存儲(chǔ)疮蹦。存在cache目錄诸迟,n磁盤(pán)緊張會(huì)被清除
下載網(wǎng)頁(yè)
將整個(gè)網(wǎng)頁(yè)下載下來(lái),正則匹配圖片url愕乎,下載圖片至本地阵苇。替換圖片URL,創(chuàng)立數(shù)據(jù)庫(kù)管理,管理繁瑣感论,細(xì)致到每一張圖片的增刪改绅项。存儲(chǔ)目錄隨意
服務(wù)器壓縮包
將從服務(wù)器下載壓縮包,圖片資源比肄,css,js等都是相對(duì)路徑快耿。下載成功后切換,做好對(duì)比芳绩,就可以做好 存儲(chǔ)目錄隨意
在說(shuō)存儲(chǔ)之前掀亥,首先要了解兩個(gè)類(lèi)
通過(guò)這前兩個(gè)類(lèi)來(lái)實(shí)現(xiàn)離線化
1. 設(shè)置NSURLCache
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
? ? //URL緩存設(shè)置
? ? NSURLCache *urlCache = [[NSURLCache alloc]initWithMemoryCapacity:25*1024*1024 diskCapacity:100*1024*1024 diskPath:nil];
? ? [NSURLCache setSharedURLCache:urlCache];
? ? return YES;
}
2. 存儲(chǔ)離線緩存
在WKWebView中,加載成功后妥色,將此次的請(qǐng)求請(qǐng)求緩存起來(lái)
//轉(zhuǎn)換為NSURL類(lèi)型
NSURL *url = [NSURL URLWithString:self.loadURL];
//WK用于正常加載
self.request =? [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:6];
//得到NSData 數(shù)據(jù)
NSData *dataContent = [NSData dataWithContentsOfURL:url];
//NSURLCache 實(shí)例化
NSURLCache *cache = [NSURLCache sharedURLCache];
//得到相應(yīng)
NSURLResponse *response = [[NSURLResponse alloc]initWithURL:url MIMEType:@"text/html" expectedContentLength:0 textEncodingName:@"UTF-8"];
//得到CacheURLResponse
NSCachedURLResponse *cacheResponse = [[NSCachedURLResponse alloc]initWithResponse:response data:dataContent];
//進(jìn)行存儲(chǔ)
[cache storeCachedResponse:cacheResponse forRequest:self.request];
在APP目錄中搪花,會(huì)在Caches目錄下以Bundle Identifier為名創(chuàng)建緩存目錄。緩存的資源圖片嘹害,CSS撮竿、JS、html等都在這個(gè)目錄下笔呀。
正常加載
[self.wkWebView loadRequest:self.request];
離線加載
NSURLCache *cache = [NSURLCache sharedURLCache];
NSCachedURLResponse? *current = [cache cachedResponseForRequest:self.request];
[self.wkWebView loadData:current.data MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:self.request.URL];
沒(méi)錯(cuò)幢踏,這是核心代碼,就這么點(diǎn)许师。說(shuō)真的房蝉,用到的就這么多,但實(shí)際上業(yè)務(wù)不同微渠,產(chǎn)生的邏輯思路也不同惨驶。你會(huì)發(fā)現(xiàn)存儲(chǔ)的目錄在Cache下面,如果手機(jī)的內(nèi)存警告敛助,磁盤(pán)空間不足粗卜,將會(huì)被清理掉。對(duì)不需要長(zhǎng)久持續(xù)保持的業(yè)務(wù)來(lái)說(shuō)纳击,沒(méi)有什么必要续扔,但需要長(zhǎng)久保存的業(yè)務(wù)來(lái)說(shuō)是致命的攻臀。