2011-02-22 76 views
0

我有一个iPhone/iPad应用程序,通过UINavigationController和UITabViewController管理它的众多视图控制器。 UINavigationController处理大部分用户交互,UITabViewController处理用户设置/首选项。迷失在视图 - UIViewControllers之间转换的最佳方式

我的应用程序委托初始化UINavigationController并推送第一个视图控制器。设置(UITabViewController)可以通过导航控制器菜单栏上的按钮访问;用户可以通过UITabViewController上的按钮返回主应用程序(UINavigationController)。

我的问题是:当我显示UITabViewController时,应该如何处理UINavigationController(及其视图控制器的堆栈),反之亦然?是否有任何理由在用户在两者之间切换时删除/释放/重新创建每个父控制器,还是应该将每个父控制器的视图添加/删除到我的应用程序窗口?

看来,第一个选项会更加注意内存/资源,但这些好处可能会被处理成本盖过/初始化的视图控制器每次-ALLOC重。

谢谢。

回答

0

您不必手动管理导航控制器的堆栈。我会做的是将您的设置视图控制器作为模态视图呈现。您可以在导航控制器级别执行此操作。

假设settingsViewController是您的主视图控制器的属性。

self.settingsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal 
[self.navigationController presentModalViewController:self.settingsViewController animated:YES]; 
0

我假设你的意思是UITabBarController。

如果你的导航视图会在一个标签项的标签视图展现出来,我会建议让标签栏控制器为您的应用程序(并因此总是出现在应用程序)的根视图控制器。

如果你的导航视图是主视图,用户只需打开了设置等标签栏视图,将返回导航视图,然后模态呈现标签栏控制器是正确的方式。

在第一种情况下(在标签栏控制器导航控制器),你不会照顾添加/删除或分配/释放的观点作为的UIKit将管理它。

在第二种情况下,您可以在想要显示它时创建一个标签栏控制器。 presentModalViewController将保留视图控制器,因此您可以在发送消息后立即将其释放。如果你想持有视图控制器,那么你在应用程序加载时创建一个,并将其保存在导航控制器中(并且导航控制器将始终保留在内存中)。

相关问题