2013-05-13 4 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.

Есть ли способ, «дружественный Apple» для достижения этого?

ответ

6

Я понял это, посмотрев в WebKit «недокументированные» предпочтения. При следующей настройке можно отключить DiskImageCache на весь срок службы приложения:

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

Как представляется, в iOS7 для меня нет. – DrMickeyLauer

+1

Я только что протестировал это решение с помощью iOS 7.1.1 и загрузил пример кода на [GitHub] (https://github.com/objectiveself/WebViewImageCacheControl). Обратите внимание, что настройка вступит в силу при следующем запуске приложения, когда UIWebView будет инициализирован. –

+0

@DrMickeyLauer, попробуйте WebKitOfflineWebApplicationCacheEnabled – malex

Смежные вопросы