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

这种情况下,如果出现内存警告,会在app的tmp目录下新建一个文件夹,通常命名为DiskImageCache-random_suffix,打开的文档中的所有图片都保存在这里。

UIWebView加载新请求后,如果我调用

[sharedCache removeAllCachedResponses];

这些临时图像被删除。

防止缓存图像的唯一方法是调用

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

但这意味着使用私有 API。

有没有“苹果友好”的方式来实现这一目标?

4

1 回答 1

6

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

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];
[[NSUserDefaults standardUserDefaults] synchronize];
于 2013-05-27T19:41:01.943 回答