1. 程式人生 > >iOS開發 最新的NSURLProtocol之webView的離線快取,快取webView,離線載入

iOS開發 最新的NSURLProtocol之webView的離線快取,快取webView,離線載入


四:1.+ (BOOL)canInitWithRequest:(NSURLRequest *)request;
作用:(1).處理返回YES,不處理返回NO
(2).打標籤,已經處理過的不在處理
這篇文章有具體說明:http://www.jianshu.com/p/7c89b8c5482a
2.+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request;
作用:做快取的話,沒什麼用;
3.- (void)startLoading
作用:開始載入時自動呼叫 ,作用大了去了,該方法裡判斷,有快取時載入快取,沒快取再去請求,demo裡該方法有具體詳細邏輯
#pragma mark - NSURLConnectionDelegate
1.- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
}
作用.快取response
2.- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.client URLProtocol:self didLoadData:data];
}
作用:拼接data,也是快取用
3.- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
    [self.client URLProtocolDidFinishLoading:self];
}
作用:一條請求載入完畢後呼叫,,還是快取的作用。。
4.- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [self.client URLProtocol:self didFailWithError:error];
}

五:溫馨提示:非常重要,你可能迷惑的坑
0. 文中的所有key是當前載入的url加md5加密的字串;
1. 執行專案,你會發現,我只是載入了一個url,為毛快取達到了64個
關閉網路:第二次執行,會給出所有的快取key,,這也回答了筆者一開始說的.css樣式檔案,以及.js檔案都被快取下來了。。所以這裡不回出現像LoadHTMLString快取只出現光禿禿的文字,沒了樣式的webView
http://csdnimg.cn/public/common/libs/bootstrap/css/bootstrap.css
http://csdnimg.cn/public/static/css/avatar.css
http://m.blog.csdn.net/static/css/common.css
http://m.blog.csdn.net/static/js/libs/html5shiv.min.js
http://m.blog.csdn.net/static/js/apps/blog_mobile.js
2.文中的快取策略,筆者用的是YYCache 。。快取物件是個單例,裡面放了64條快取資料,,當控制器傳入的url和快取的key不一樣時,把單例物件的64個快取,都倒掉,然後在加入新的。。(既然要快取,那肯定是會有新的快取,別忘了刪除之前的快取,還有之前的快取不是一條,而是一大坨,發現這一點,我走了很大的坑)
3. demo中給的連結快取了是64個,那麼就是自定義的NSURLProtocol被呼叫了64次;所以一些有關於記錄的東西,最好儲存在NSUserDefaults中;
六:https://github.com/horisea/NSURLProtocol-webView
在上一次github地址吧。。如果幫助了你,就給個star吧,另外這一塊確實很饒人,建議斷點跟蹤,一上午估計就能明白點什麼。。
如果文中有不對的地方,或者您有問題解決不了,可以扣扣聯絡  樓 主,http://blog.csdn.net/horisea/article/details/51872619部落格最下方有樓主聯絡方式。。。轉載註明出處咯