ios - 禁用 UIWebView DiskImageCache

标签 ios objective-c caching uiwebview docx

当加载包含图像的文档(例如 Microsoft Word docx 文件)时,无论缓存策略如何,UIWebView 都会在收到内存警告时始终缓存图像。

下面是一个示例代码片段:

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]];

但这意味着使用私有(private) API。

是否有一种“Apple 友好”的方式来实现这一目标?

最佳答案

我在查看 WebKit“未记录”首选项后发现了它。通过以下设置,可以在应用程序的整个生命周期内禁用 DiskImageCache:

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

关于ios - 禁用 UIWebView DiskImageCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525065/

相关文章:

objective-c - 使用 "generated strings"(stringWithFormat) 作为 NSDictionary 的键

ruby-on-rails - Rails 缓存清扫器

java - Spring 缓存抽象(AdviceMode.ASPECTJ)在 spring-data-jpa 存储库中不起作用

ios - 画一条直线 iOS

ios - 如何在 Swift 中从 SKScene 呈现 UiView

ios - 如何使用带有自动布局约束的动画移动 View 在 iOS 上

javascript - 当使用 javascript 更改时,浏览器是否缓存图像 src

ios - 使用 AVAudioPlayer 使 UISlider 随进度更新

android - 使用 'google_maps_flutter' 插件无法在 Flutter 中显示当前用户位置

ios - 如何检查设备是否可以调用电话(iOS 8)?