web-dev-qa-db-ja.com

モーダルビューの却下時にUIWebViewコンテンツをクリアする(iPhone OS 3.0)

現在、モーダルビュー内に表示されるUIWebViewがあります。これは基本的に、ユーザーがリンクをクリックしたときにページのビューを提供する詳細ビューです。ビューが閉じられてから再び表示された場合(ユーザーが別のリンクをクリックした場合)、以前にロードされたコンテンツは引き続き表示され、新しいコンテンツは最後のコンテンツの「上」にロードされます。 UIWebViewのインスタンスはセッション間で存続し、メモリが必要な場合にのみ解放されるため、これは理にかなっています。

ただし、モーダルビューが閉じられたときにUIWebViewを完全にクリアして、1)コンテンツがクリアされ、2)メモリが解放されるようにしたいと思います。これまでのところ、私の研究と試みは答えを見つけていません。これらのリンクは私には機能しませんでした:

  1. IWebViewのメモリを解放することは可能ですか?
  2. 再利用されたUIWebViewは、iPhoneで以前にロードされたコンテンツを短時間表示します

私はもう試した [[NSURLCache sharedURLCache] removeAllCachedResponses];そしてwebViewをnilに設定し、モーダルビューの却下時にwebViewを手動で解放しても役に立ちません。賢明な大衆からの考えはありますか?

21
Ricky

Webビューを解放することが、おそらく最善のアプローチです。ビューがビュー階層にある(スーパービューがある)場合は、removeFromSuperviewを呼び出して、スーパービューにビューを解放させる必要があります。

空のドキュメントのhtml文字列をロードすることもできます。

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
34
drawnonward

loadHTMLStringが遅すぎる場合があります。次のものも使用できます。

[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];

それが多くのメモリを解放するかどうかはわかりませんが...

64
rob

状況によっては、drawnonwardとrobによって提案された方法が機能しない場合があるようです(おそらく、クリアされているページのCSSと関係があります)が、これは機能しました:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
14
Adrian B

通常、JavaScriptの評価は、新しいリクエストをロードするよりも高速です。

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
8
surajz

私の場合、コンテンツからWebビューを即座にクリアし、すぐに他の何かのロードを開始できるようにする必要がありました。空のドキュメントHTML文字列をロードしたり、JavaScriptでページをクリアしたりしても、目的の効果は得られませんでした。代わりに私は使用しました:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];

そして、これによりビューがデフォルトの背景にクリアされ、期待どおりに次のページの読み込みが開始されました。

これが他の誰かにも役立つことを願っています。

5
Ivan Karpan

私は次のことを好みます:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
0
zqxiaojin