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