21

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

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

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

webView[[NSURLCache sharedURLCache] removeAllCachedResponses];をnilに設定し、modal-view-dismiss時にwebViewを手動で解放してみました。賢明な大衆からの考えはありますか?

4

6 に答える 6

64

時々loadHTMLString遅すぎる。次のものも使用できます。

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

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

于 2010-11-08T20:00:03.190 に答える
34

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

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

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
于 2010-05-29T01:48:45.943 に答える
14

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

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
于 2011-05-19T15:11:21.540 に答える
8

通常、JavaScriptの評価は、新しいリクエストを読み込むよりも高速です。

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
于 2011-09-14T01:34:09.710 に答える
5

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

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

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

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

于 2011-08-31T14:01:20.070 に答える
0

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

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
于 2013-08-23T05:28:21.370 に答える