3

サブビューとして aを追加し、その後それを削除する次のサンプル コード (ARC を使用) がありますUIWebView(画面上のタップ ジェスチャによって切り替えられます)。

- (void)toggleWebViewLoading:(UITapGestureRecognizer *)sender
{
    if (webView == nil)
    {
        webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 100.0f)];
        [webView loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://www.google.ca"]]];
        [self.view addSubview:webView];
    }
    else
    {
        [webView removeFromSuperview];
        webView = nil;
    }
}

アプリが最初に空白で読み込まれると、およそ(Instruments.app から読み取ったライブ バイト)UIViewを消費します。1.29 MB空白をタップするUIViewtoggleWebViewLoading:関数が起動し、新しい が作成され、UIWebViewGoogle が読み込まれ、サブビューとして追加されます。この一連の操作が完了すると、メモリ使用量は約3.61 MB. もう一度タップすると、そのスーパービューからtoggleWebViewLoading:が削除され、 に設定される 2 番目の部分が実行されます。この時点で、メモリ消費量は に減少しました。 UIWebViewnil3.38 MB

私の質問は、UIWebView からメモリを完全に再利用するにはどうすればよいですか (つまり、が削除されて に設定され1.29 MBた後、メモリ消費量が初期値または同様のものに戻る)?UIWebViewnil

その他の関連情報

なぜ私がメモリの節約をそれほど気にするのかと誰かが尋ねる前に、私は Xamarin/MonoTouch を使用して 10+ がメモリを消費~2 MBしているより複雑な状況を抱えており、そうでない場合はすべてのメモリを回収することはできません。もはや必要。答えは、この単純な質問に集約されると思います。UIWebView200 MB+

4

1 に答える 1

0

I would suggest monitoring how many threads you have active. UIWebView spawns several threads for itself. I expect they are not cleaned up properly once the UIWebView is deallocated, but it's just a hunch.

于 2013-10-19T04:39:07.213 に答える