0

次のようなナビゲーションコントローラーでsetViewControllersを使用しています:

XYZController *xyz = [XYZController alloc] initWithXibName:@"XYZController"];
[myNavController setViewControllers:xyz];
[xyz release];

インストゥルメントでの割り当てを確認していますが、この関数が 5 回呼び出されて #live に 5 回表示されると、この関数がインストゥルメントで live オブジェクトを呼び出す回数が増えることがわかりました。

つまり、メモリを割り当てていることを意味します。これでメモリ割り当てを処理するにはどうすればよいですか。


編集

RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[rootController.navigationController.navigationBar setHidden:YES];
[self.myNavController setViewControllers:nil];
[self.myNavController setViewControllers:[NSArray arrayWithObjects:navController,nil]];
[rootController release];
[navController release];

これは、アプリケーションで使用している実際のコードです。ここでの問題は、インストルメント内の rootController の生きているオブジェクトの数が、このコードの呼び出しがあるたびに常に増加することです。rootController の数が増えるだけでなく、クラス変数も解放されないため、メモリがたまってしまいます。その結果、アプリケーションのパフォーマンスが大幅に低下します。

これについてアドバイスしてください。

4

2 に答える 2

0

まず、インストルメントはメモリ割り当てを表示するときに誤検知を提供することがよくあるため、これらの警告を少し塩味で受け取ります。(コードのエラーは別として)私にはかなり有効に見えるので、マウントするべきではありません。

第二に、上記のように単一のView Controllerではなく、の配列を期待しているため、呼び出し時にクラッシュするmyNavControllerため、コードが正しくありません。これはおそらくクラッシュするか、コンパイルすらできません。UINavigationControllersetViewControllersUIViewController

コードが有効であることを確認し、インストゥルメントを再度実行してください。それでも同じ問題が発生する場合は、おそらく単なる誤検出であり、無視する必要があります。

于 2012-09-06T13:25:51.800 に答える
0

ゾンビをオンにしてメモリ使用量をテストしないようにしてください (NSZombiesEnabled 引数、またはスキーム診断で)。デフォルトでは、ゾンビは決して削除されません。

于 2012-09-06T13:28:05.473 に答える