私のiPadアプリケーションでは、単一のUINavigationControllerと複数のviewControllersがタブとして機能しています。私はUITabbarControllerを使用していません。なぜなら、タブのカスタム見た目が必要だったからです。テーブルビュー全体をカプセル化する単一のUITableViewControllerのサブクラスである異なるコントローラをロードしていました。画面の下部に表示されます。iPhoneのデザインパターンとメモリ管理の問題
私が実装した設計を見ると、実際にはnavigationControllerは必要ありません。私はビューをポップ/ポップする必要はありません。 。
私が今行っていることである。
私のappDelegateの私のdidFinishLaunchingWithOptionsメソッドで、私は私のナビゲーションコントローラを割り当てています:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UINavigationController *navigationVC = [[UINavigationController alloc]init]; navigationVC.navigationBarHidden = YES; navigationVC.navigationBar.barStyle = UIBarStyleBlack; self.navigationController = navigationVC; [window addSubview: [self.navigationController view]]; [navigationVC release]; //set orientation as portrait self.currentOrientationType = PORTRAIT; //start with launch screen view controller [self setViewController:LAUNCH param:nil]; return YES; }
そして、私の方法でsetViewController :param:、渡されたIDに応じて、適切なviewControllerを次のようにロードしています:
- (void)setViewController:(NSString *)ID param:(NSString *)param {
UIViewController *viewController;
if(ID == HOME) {
viewController = [[HomeScreenViewController alloc]initWithNibName:@"HomeScreenViewController" bundle:nil];
}
else if(ID == ...){
}
...
//push the specified view controller
[self setTransitionType:nil];
[[self navigationController] initWithRootViewController:viewController];
[viewController release];
}
}
何が起こっているのかは、rootViewControllersが割り当て解除されていないので、私のviewControllersのいずれかがそういうことです。それは、新しいViewControllerごとに毎回navigationControllerを初期化すると、ルートビューコントローラへの参照が保持され、以前のviewControllerで保持していた参照カウントを何度でも初期化するため、間違っているようです。
任意の時点で1つのviewControllerしか必要ないので、より良いアプローチは何でしょうか?