似乎UIWebView
並不總是每次調用storeCachedResponse:forRequest:
加載資源。有誰知道爲什麼?我試圖通過使用-[NSURLCache storeCachedResponse:forRequest:]
來緩存圖像,但它的大部分工作都很好,但在某些情況下,UIWebView
不會在頁面加載時調用此方法,其中實際上有圖像。UIWebView並不總是調用 - [NSURLCache storeCachedResponse:forRequest:]
回答
如上所述hereNSURLConnection
如果文件大小超過50kb(52428字節),則不會調用storeCachedResponse:forRequest:
。
嘗試ASIHTTPRequestcaching。
您是否檢查過HTTP狀態和緩存標頭?過期,緩存控制等?也許一個服務器回答status = 304沒有任何響應正文?
- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)aResponse
{
NSLog(@"CODE: %d", ((NSHTTPURLResponse *)aResponse).statusCode);
NSLog(@"HEADERS: %@", ((NSHTTPURLResponse *)aResponse).allHeaderFields);
}
接聽賞金提供的查詢:
我看到這對小文件(字節100S),以及。 web視圖 也沒有叫
cachedResponseForRequest:
我發現this question解決此行爲直接:
儘管蘋果的文檔indicating otherwise,
NSURLCache
iOS上沒有做任何磁盤(閃存)緩存在所有。 您 可以繼承NSURLCache
改變獲取和 存儲操作的行爲,使用的磁盤(如SDURLCache
一樣),但由於 以下的嚴格限制如何使用高速緩存和實施, 這不工作,以及你所期望的:
NSURLConnection
甚至不叫storeCachedResponse:forRequest:
的文件在50KB左右(> = 52428 字節,要準確)。這使得NSURLCache
繼承我們的使用(200KB圖像)是毫無意義的,因爲它甚至不會進入緩存。作爲 的結果,我們必須在高於NSURLConnection
的級別手動添加高速緩存。即使一個調用NSURLCache的內置
storeCachedResponse:forRequest:
手動,只保存在內存中 響應,如果是小於180KB。我通過 手動調用storeCachedResponse測試了這一點,並且看到currentMemoryUsage
之前/之後的數據長度在大約180KB以上沒有變化。 所以我們也必須編寫自己的LRU內存緩存。
(重點煤礦。)
這似乎是負責的行爲被調用出來。由於the current accepted answer points out,ASIHTTPRequest是此行爲的預期解決方法。
然而,注意警告頁面的頂部:
請注意,我不再從事這個庫 - 你可能要考慮使用別的新項目。 :)
您應該考慮依賴支持的庫,或者,如果您願意,一旦它成爲您的代碼的基礎之後,回饋給此庫。
我不知道它是如何工作的UIWebvieuw,但是當你使用的NSURLRequest文件的最大大小取決於你如何初始化Urlcache文件(initWithMemoryCapacity:(NSUInteger)memoryCapacity ...) 我只是緩存一個2MB的文件
對我來說,從UIWebView請求的515KB .css文件可以用'memoryCapacity:0 diskCapacity:1024 * 1024 * 256'初始化的'NSURLCache'子類的'cachedResponseForRequest:'處理。 – hiroshi 2014-08-11 02:52:10
NSURLCache
作品有兩個不同的緩存:磁盤緩存和內存緩存
- 響應將被緩存在內存中緩存如果響應的大小是根據 50KB 和
- 迴應將被緩存到磁盤上的緩存,如果響應的大小是超過 50KB
如果用diskPath零初始化NSURLCache那麼磁盤緩存也不會主動和storeCachedResponse:forRequest:
將只要求響應大小在50kb以下。
所以配置Urlcache文件這樣
[[MYCustomURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:20 * 1024 * 1024
diskPath:@"urlcache.db"];
- 1. UIWebView和NSUrlCache
- 2. UIWebView和NSURLCache問題
- 3. 的UIWebView和NSURLCache有
- 4. iOS中的UIWebview的NSURLCache
- 5. 調用setImageBitmap並不總是ImageView的
- 6. 並不總是調用tvOS preferredfocusedview
- 7. SyncAdapter onPerformSync並不總是被調用
- 8. FinderSync:beginObservingDirectoryAtURL並不總是被調用
- 9. 調用setVisible並不總是在操作
- 10. ViewPager - 並不總是調用onCreateView
- 11. captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler並不總是被調用
- 12. Rest API並不總是被調用
- 13. NSFetchedResultsController並不總是調用didChangeObject:atIndexPath:forChangeType:newIndexPath:NSFetchedResultsChangeMove
- 14. setNeedsDisplay並不總是調用的drawRect
- 15. 調用setNeedsDisplay並不總是觸發drawLayer:inContext:
- 16. UIWebView NSURLCache加載離線數據
- 17. Ios通過NSURLCache攔截UIWebview請求並替換響應
- 18. 如何檢查UIWebView是否從NSURLCache加載?
- 19. NSURLCache不支持file://?
- 20. UIWebview中的大頁面並不總是對角線滾動
- 21. UIWebview的前進,然後向後並不總是工作
- 22. Android:Camera.takePicturebacks回調並不總是觸發
- 23. NSURLCache不iOS8上
- 24. UIWebView背景總是白色
- 25. Skype4Py:messageStatusChanged不總是調用
- 26. activity.on不總是被調用
- 27. 如何在iOS中設置緩存模型(用於NSURLCache和UIWebView)?
- 28. AJAX並不總是調用控制器的動作,但總是處理成功
- 29. NSURLCache和.svg文件
- 30. UIWebView:不會調用委託
我注意到這一點也;雖然只有*在*設備爲我的應用程序。當Web視圖從NSURLCache加載請求時,它似乎跳過該頁面上資產的相同緩存。 – Nevir 2012-03-28 01:05:42