7

ユーザーがボタンをクリックすると、2 つのビュー コントローラーを持つ新しいタブ バー ビュー コントローラーが表示されます。これが私がそれを行う方法です

ACLevelDownloadController *dvc = [[ACLevelDownloadController alloc] initWithNibName:@"ACLevelDownloadController" bundle:[NSBundle mainBundle]];
ACInstalledLevelsController *ivc = [[ACInstalledLevelsController alloc] initWithNibName:@"ACInstalledLevelsController" bundle:[NSBundle mainBundle]];
UITabBarController *control = [[UITabBarController alloc] init];
control.viewControllers = @[dvc, ivc];
dvc.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:0];
ivc.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:1];
[self presentViewController:control animated:YES completion:nil];

これはうまくいきます。dismissとの両方でメソッドをACLevelDownloadController使用して、そのビュー コントローラーを閉じACInstalledLevelsControllerます。それもうまくいきます。奇妙なのは、View Controller を提示するとメモリ使用量が増えることです ここに画像の説明を入力

しかし、元に戻ることはありません。再度提示するとさらに上がる ここに画像の説明を入力 ARCを使用しています。ビュー コントローラが使用するメモリが、閉じられた後に解放されないのはなぜですか?

編集

それらが却下される方法は両方ACLevelDownloadControllerであり、ACInstalledLevelsControllerクリックされたときにこのメソッドを呼び出す IBActions が接続されています

- (void)dismiss:(id)sender{
    [self dismissViewControllerAnimated:YES completion:nil];
}
4

1 に答える 1

3

メモリ使用量のグラフからわかることは、tabViewController が適切に破棄されておらず、スタックに蓄積されていることです。却下するときは、tabViewController を提示した viewController がそれを却下できるようにする必要があります。解雇するのはその責任です。また、アウトレットの弱い参照を保持し、viewWillDisapper:で nil** への強い参照を割り当てます。ユーザーから重要な情報を取得するための一時的な中断として、viewController をモーダルに提示できます。ここに当てはまらない場合は、表示をモーダルに削除できます。このリンクを確認してください。お役に立てれば :)

于 2013-06-12T05:54:58.750 に答える