0

Apple の SimpleEKDemo アプリケーションをプロファイリングすると、いくつかのメモリ リークがあることに気付きました。

リークの 1 つは __NSArrayM で、リークされたブロックの履歴に Malloc/Assign/Release の 3 行があります。

質問 - 誰かがここで根本的な原因の問題を指摘できますか? (漏れのあるオブジェクトが作成された場所のインストルメント出力を取得する方法を学び、そこから根本的な原因を突き止めようとしているので、これは本当に便利です)

4

1 に答える 1

3

リークのあるデモを実行すると、リークがあることに気付くでしょうviewDidLoad(責任のあるフレーム)。詳細に切り替えCall Treeて有効Invert Call Treeにしている場合は、通話に関連するリークが表示されます+[NSArray new]。それを少し開いてみると、のinitWithArrayでどちらが呼び出されているかがわかります。問題のビットは、RootViewControllerviewDidLoad

self.eventsList = [[NSMutableArray alloc] initWithArray:0];

eventsListretained プロパティであるため、作成されたオブジェクトの保持カウントreleaserelease2deallocですeventsList。このオブジェクトを自動解放する必要があります。

self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];

修正したら、エラーは発生しません。

于 2011-05-30T06:03:31.607 に答える