2013-05-13 29 views
4

加載包含圖像的文檔時(例如Microsoft Word docx文件),UIWebView將在收到內存警告時始終緩存圖像,而不考慮緩存策略。禁用UIWebView DiskImageCache

之後,有一個示例代碼段:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:1024 * 1024 
               diskCapacity:0 
               diskPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"URLCache"]]; 
[NSURLCache setSharedURLCache:sharedCache]; 

NSURLRequest* req = [NSURLRequest requestWithURL: 
        [NSURL URLWithString:@"http://www.its.swinburne.edu.au/about/projects/templates/TechnicalSpecificationTemplatev1.1-[ProjectName]-[ver]-[YYYYMMDD].docx"] 
        cachePolicy:NSURLRequestReloadIgnoringCacheData 
        timeoutInterval:10]; 

在這種情況下,如果出現內存不足的警告,一個新的文件夾在TMP目錄中的應用程序的創建,通常命名爲DiskImageCache,random_suffix並且打開的文檔中的所有圖像都保存在此處。

的UIWebView加載一個新的請求,如果我叫

[sharedCache removeAllCachedResponses]; 

這些臨時的圖像將被刪除。

以防止緩存圖像的唯一方法是調用

[NSClassFromString(@"WebCache") performSelector:@selector(setDisabled:) withObject:[NSNumber numberWithBool:YES]]; 

但這意味着使用私有API。

是否有「蘋果友好」的方式來實現這一目標?

回答

6

我在查看WebKit「無證」首選項後發現它。使用以下設置,可以在應用程序的整個生命週期中禁用DiskImageCache:

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

似乎無法在iOS7中爲我工作。 – DrMickeyLauer 2014-04-23 08:40:31

+1

我剛剛使用iOS 7.1.1測試了這個解決方案,並將示例代碼上傳到了[GitHub](https://github.com/objectiveself/WebViewImageCacheControl)。 請注意,在UIWebView初始化時,下次啓動應用程序時,設置將生效。 – 2014-05-05 09:23:25

+0

@DrMickeyLauer,嘗試WebKitOfflineWebApplicationCacheEnabled – malex 2015-02-19 22:46:45