現在、モーダルビュー内に表示されるUIWebViewがあります。これは基本的に、ユーザーがリンクをクリックしたときにページのビューを提供する詳細ビューです。ビューが閉じられてから再び表示された場合(ユーザーが別のリンクをクリックした場合)、以前にロードされたコンテンツは引き続き表示され、新しいコンテンツは最後のコンテンツの「上」にロードされます。 UIWebViewのインスタンスはセッション間で存続し、メモリが必要な場合にのみ解放されるため、これは理にかなっています。
ただし、モーダルビューが閉じられたときにUIWebViewを完全にクリアして、1)コンテンツがクリアされ、2)メモリが解放されるようにしたいと思います。これまでのところ、私の研究と試みは答えを見つけていません。これらのリンクは私には機能しませんでした:
私はもう試した [[NSURLCache sharedURLCache] removeAllCachedResponses];
そしてwebViewをnilに設定し、モーダルビューの却下時にwebViewを手動で解放しても役に立ちません。賢明な大衆からの考えはありますか?
Webビューを解放することが、おそらく最善のアプローチです。ビューがビュー階層にある(スーパービューがある)場合は、removeFromSuperviewを呼び出して、スーパービューにビューを解放させる必要があります。
空のドキュメントのhtml文字列をロードすることもできます。
[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
loadHTMLString
が遅すぎる場合があります。次のものも使用できます。
[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];
それが多くのメモリを解放するかどうかはわかりませんが...
状況によっては、drawnonwardとrobによって提案された方法が機能しない場合があるようです(おそらく、クリアされているページのCSSと関係があります)が、これは機能しました:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
通常、JavaScriptの評価は、新しいリクエストをロードするよりも高速です。
[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
私の場合、コンテンツからWebビューを即座にクリアし、すぐに他の何かのロードを開始できるようにする必要がありました。空のドキュメントHTML文字列をロードしたり、JavaScriptでページをクリアしたりしても、目的の効果は得られませんでした。代わりに私は使用しました:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];
そして、これによりビューがデフォルトの背景にクリアされ、期待どおりに次のページの読み込みが開始されました。
これが他の誰かにも役立つことを願っています。
私は次のことを好みます:
[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]