2

のメモリ使用量をテストするための小さなテスト TabController アプリを作成しましたUIWebViewUIWebView各タブをクリックすると、 のメイン ビューにを追加する単純なビュー コントローラが表示されviewWillAppearます。Webview は、1000 個の画像を表示するローカル テスト html ファイルを読み込みます。

viewWillDisappearでは、メモリ内に複数のインスタンスが必要ないため、スーパー ビューから削除して WebView の割り当てを解除します。WebView の割り当てを解除する前に、HTML 実装のメソッドを呼び出して、ブラウザー ウィンドウ オブジェクトに含まれるすべてのオブジェクトを破棄します。

私が気付いたのはUIWebView、初めて初期化するときに、約 600KB のメモリが割り当てられることです。タブを切り替えて WebView の割り当てを解除すると、そのメモリは元に戻りません。

タブを切り替えた後、次の WebView が割り当てられて初期化されると、約 20 KB のメモリしか割り当てられません。次のタブをクリックすると、現在の Web ビューの割り当てが解除され、20 KB のほとんどが返されます。

をレンダリングするときに必要な依存ライブラリを保持しているオペレーティングシステムの問題UIWebViewですか?

これが私のviewWillAppear/viewWillDisappearメソッドです:

- (void) viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     webView = [[UIWebView alloc] initWithFrame:[self view].frame];
     webView.delegate = self;
     [[self view] addSubview:webView];

     NSString *fileStr = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@""];
     NSMutableString* template = [NSMutableString stringWithContentsOfURL:[NSURL fileURLWithPath:fileStr] encoding:NSUTF8StringEncoding error:NULL];

     NSString *path = [[NSBundle mainBundle] bundlePath];
     NSURL *baseURL = [NSURL fileURLWithPath:path];

     NSData* d = [template dataUsingEncoding:NSUTF8StringEncoding];
     [webView loadData:d MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:baseURL];
     [webView release];
}

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    webView.delegate = nil;
    [webView stopLoading];
    [webView stringByEvaluatingJavaScriptFromString:@"destroy();"];
    [webView removeFromSuperview];
}
4

0 に答える 0