私たちのアプリのホーム画面(そしてすべてのユーザーが最初に見たもの)にはいくつかのセクションがあり、そのほとんどはユーザーが開くことができる別のWebviewを含んでいます。そうすることで、メモリ使用量がわずか26MBから最大85MBまで、またはそれ以上に増加します(別のWebビューを開いた後)。使用後にiOSのUIWebViewリソースを解放する
私たちが見つけた問題は、いったん閉じてしまえば、すべてのWebページリソースがメモリに保持されているように見えることです(使用されたメモリはたぶん数MB減少します)。
webviewがオープンしなければならなかったリソースを解放したいのですが、後で、非常に多くのメモリを必要とする非常に厳しいセクションがあります。それらのウェブビューのいくつかは前に。
私はインターネット上でいくつかのオプションを試してみましたが、どれもこれまでに働いていませんでした。
// Try to clean used webview
[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView stopLoading];
self.webView.delegate = nil;
[self.webView removeFromSuperview];
self.webView = nil;
これらはメモリ使用量にほとんど影響を与えませんでした。私はここに欠けているものはありますか?私はすでに、私はWebViewのが開け続けるだろう何のリークがないことを確認し二重に私はすでに、私は(self.webView = nil;
)
編集持っていること、それへの参照のみを解放しています:私はちょうど一からプロジェクトを作成し、追加しましたwebviewとそれをクリックするたびに別のWebをロードするボタンがあり、これがメモリ使用量を増やします。私はまた、クリックしたときにwebviewを破壊するボタンを追加しました。それは、メモリが実質的にリソースを解放しないように、メモリは同じままです。あなたはジェイソン・ベイカーから、この記事をお読みください
ARCを使用していますか? ARCを使用していない場合は、Webビューでリリースを呼び出す必要があります。 – Ankush
@Ankushはい、ありがとうとにかく – h4lc0n
あなたの質問の性質を誤解しているかもしれませんが、コントローラアーキテクチャを1つのUIWebViewインスタンスに変更することを提案したいと思いますが、これは本当に重いですが、素子。すべてのウィジェットをこのWebビューにフィードするサーバプロキシ/アグリゲータを追加できます。後であなたはjavascriptイベントをキャッチし、あなたのロジックを適用することができます – voromax