очистка кеша webviews для локальных файлов

Я нашел несколько похожих сообщений, но они, похоже, не имеют никакого отношения к тому, что я делаю. У меня есть 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];

Я также попытался установить политику кэширования веб-представлений, но это, похоже, просто съело память, так как, когда я выпустил веб-просмотр, память все еще оставалась позади. Когда я снова вошел и перераспределил, он не использовал ту же память.

Хотя я не думаю, что это правильное направление. Все они были помечены как способы предотвращения кэширования веб-страниц, но, похоже, они не действуют на локальные файлы. Я действительно не уверен, куда еще пойти с этим. Если кто-нибудь знает, как принудительно очистить кеш или вообще предотвратить кеширование, я был бы очень признателен за помощь.


person user675446    schedule 30.06.2011    source источник


Ответы (2)


WebKit поддерживает собственные кэши в дополнение к стандартному NSURLCache. Вы не имеете над ним контроля.

На самом деле вы должны убедиться, что ваш код ведет себя хорошо при предупреждениях о нехватке памяти, и верить, что UIWebView сделает то же самое.

person Mike Abdullah    schedule 25.04.2013

Я не уверен, что ваша проблема заключалась в загрузке кэшированных данных или просто в том, что последний запрошенный 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];
}

*вздрагивает*

person Jimmie Tyrrell    schedule 10.07.2014