2011-06-30 40 views
8

我发现了一些类似的帖子,但它们似乎对我正在做的事没有任何影响。我有一个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时,仍然留下记忆。当我重新进入并且实现时,它没有使用相同的内存。

虽然我不认为这是正确的方向。这些都被标记为阻止网页缓存的方式,但它们似乎对本地文件没有影响。 我真的不知道该去哪里。如果有人知道如何强制缓存清除,或首先防止缓存,我将不胜感激一些帮助。

回答

0

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

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

0

我不确定您的问题是加载缓存的数据,还是简单地说上一次请求的URL已被缓存,因此不会触发要加载的新文档。这似乎是对我的话,所以我用这个非常肮脏的伎俩:

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

并为每个新的Web请求:

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

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

*不寒而栗*

相关问题