禁用UIWebView磁盘图像缓存

4
当加载包含图像的文档(例如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]];

但这意味着使用私有API。

有没有一种“苹果友好”的方法来实现这个?

1个回答

6
我查看了 WebKit “未记录”的偏好设置后,我找到了解决方法。通过以下设置,可以在整个应用程序的生命周期内禁用 DiskImageCache:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];
[[NSUserDefaults standardUserDefaults] synchronize];

1
我刚刚在iOS 7.1.1上测试了这个解决方案,并将示例代码上传到GitHub。 请注意,设置将在下次启动应用程序时生效,当UIWebView被初始化时。 - Florin Pop
@DrMickeyLauer,请尝试启用WebKitOfflineWebApplicationCacheEnabled。 - malex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接