Ваш цикл for освободит и, таким образом, освободит все контроллеры представления, которые вы вставили в соответствующие корни UINavigationController (в зависимости от того, сколько у вас вкладок), т. Е. У них не будет суперпредставления, когда вы вернетесь к корнюкаждый контроллер навигации освобождается автоматически.Об этих ваших UITableViewControllers позаботились.
Что касается соответствующих UINavigationControllers, вам понадобится ваш контроллер табуляции для освобождения старого экземпляра.ИМХО, это должно быть сделано для вас, когда вы выпускаете UITabBarController.
После этого UITabBarController остается сам.Я не думаю, что это можно сделать.Ваш код удалит только представление, но не освободит сам контроллер панели вкладок.И, как указывает Кришна К, вам нужен хотя бы один контроллер представления, чтобы перезагрузить все остальные.Вставка кода в appdelegate имеет смысл, но вы должны убедиться, что ваш выход из системы () не вызовет сохранение для UITableViewController2, а также для UITabbarController, так как он вызывается из UITableViewController2 где-то.Ваш AppDelegate содержит экземпляр для TabBar-Controller, который вы можете освободить и создать новый экземпляр после удаления представления из self.window?
// manually create UITabBarController - AppDelegate holds instance
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
mytabcontroller=[[UITabBarController alloc] initWithNibName:@"foo" bundle:nil];
}
- (void) logout {
[self.tabBarController.view removeFromSuperview];
[mytabcontroller release];
mytabcontroller=[[UITabBarController alloc] initWithNibName:@"foo" bundle:nil];
[self.window addSubview:self.tabBarController.view];
}
Но, как я уже сказал, могут быть оговорки с управлением памятьюна данный момент.