0

UIWebView のサブクラスがあり、それをビュー コントローラーで使用します。

CViewController *controller = [[CViewController alloc] init];
self.webView = controller;
[controller release];

今、ビュー コントローラーで dealloc が呼び出されて呼び出します[_webView release] が、UIWebView サブクラスの dealloc が呼び出されることはなく、ビュー コントローラーをスタックに配置するたびにメモリ使用量が増加し、スタックからポップした後に解放されることはありません。また、Safari 開発ツールですべてのウィンドウを表示できるため、それらが解放されることはありません。私はretainCountをチェックします(あまり役に立たないことはわかっています)が、プロパティへの割り当て後にretainCountが3であると言われましたか?(プロパティは非アトミック、保持)

4

1 に答える 1

1

3のretainCountは赤いニシンです。無駄な気晴らし。 http://www.whentouseretaincount.comなど。

リークが繰り返し発生するシナリオがあるため、ヒープショット分析は、メモリが固執している理由を正確に特定するのに役立ちます。

ただし、そこまでする必要はないかもしれません。アプリに UIWebView が 1 つしかない場合は、ライブ オブジェクトのみを追跡し、保持/解放イベントを追跡するように割り当てインストルメントを構成するだけで済みます。それを使用して、メモリ内のオブジェクトのリストを UIWebView までフィルタリングし、オブジェクトに関連付けられている保持/解放イベントのリストをクリックします。余分な保持はそこにあります。

ただし、それは症状であり、原因ではない可能性があります。原因は、キャッシュが間違っているか、Web ビューにぶら下がっている他のオブジェクトが適切に解放されていない可能性があります。

于 2013-04-05T15:18:08.567 に答える