清除本地文件的webviews缓存

时间:2011-06-30 23:16:12

标签: ios uiwebview nsurlcache

我发现了一些类似的帖子,但它们似乎对我正在做的事情没有任何影响。我有一个UIWebView,我用它来显示我的捆绑包中的本地内容。具体来说,我正在显示一个docx文件。用户应该很少看到这个文档,我的应用程序内存很紧,所以我想做的是阻止UIWebView缓存文档。另一个可行的选择是在用户离开视图时清除缓存。每次用户进入视图时,我都必须从头开始加载它。

我像这样加载文档:

NSString * path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Intro text"] ofType:@"docx"];
NSURL * url = [NSURL fileURLWithPath:path];
request = [NSURLRequest requestWithURL:url];

doc_view_rect = CGRectMake(5,105,self.view.frame.size.width,self.view.frame.size.height);
doc_viewer = [[UIWebView alloc] initWithFrame:doc_view_rect];
[doc_viewer loadRequest:request];

在我尝试停止缓存时,我尝试过:

[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
sharedCache = nil;

并且:

if(request) {
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];
}
[[NSURLCache sharedURLCache] removeAllCachedResponses];

我也试过设置网络视图缓存策略,但这似乎只是吃了内存,因为当我发布webview时,仍然留下了内存。当我重新输入并重新分配时,它没有使用相同的内存。

我不认为这是正确的方向。这些都被标记为阻止网页缓存的方法,但它们似乎对本地文件没有影响。 我真的不确定这个还有什么去的。如果有人知道如何强制缓存清除,或者首先阻止缓存,我将非常感谢一些帮助。

2 个答案:

答案 0 :(得分:0)

除了标准NSURLCache之外,WebKit还维护自己的缓存。你无法控制它。

实际上,您必须确保您的代码在低内存警告下表现良好,并相信UIWebView也会这样做。

答案 1 :(得分:0)

我不确定您的问题是加载缓存数据,还是上次请求的URL缓存简单,因此不会触发要加载的新文档。对我来说似乎就是这种情况,所以我使用了这个非常脏的技巧:

_urlRequestCacheBust = [NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];

对于每个新的网络请求:

- (void)webViewLoadURL:(NSURL *)url
{
    [[_webView mainFrame] loadRequest:_urlRequestCacheBust];

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
    [[_webView mainFrame] loadRequest:urlRequest];
}

* *不寒而栗