设置appdelegate'窗口rootviewcontroller

时间:2013-06-14 10:34:01

标签: ios ipad uinavigationcontroller appdelegate uiwindow

在基于用户选择的Home ViewController中,我将不得不加载选定的viewcontroller。为此,我将AppDelegate.window.rootViewController更改为使用所选视图控制器的navigationcontroller。

前:

navigationController = [[UINavigationController alloc] initWithViewController:selectedViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;

这一切都运行正常,但我的问题是:从selectedViewController我导航到一些n个视图控制器,最后我通过设置appdelegate'rootviewcontroller加载HomeViewController。

navigationController = [[UINavigationController alloc] initWithViewController:homeViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;

这会清除我之前的navigationController导航堆栈吗?或者我应该从外部清除阵列?可能会解释一下当我们将导航控制器分配给appdelegate'window rootviewcontroller时会发生什么?

请注意我的应用程序是6.0版本。

2 个答案:

答案 0 :(得分:1)

导航堆栈由导航控制器维护。因此,如果您创建新的导航控制器 - 它的堆栈显然是空的。 RootViewController属性定义谁是应用程序当前窗口中的主viewController。因此,替换rootviewcontroller会将新控制器显示为此窗口的主控制器。

答案 1 :(得分:1)

如果没有查看代码,没有人可以保证您的代码是否有内存泄漏。通常,当导航控制器被销毁时,它将释放堆栈上的视图控制器。但有时视图控制器可以保留在代码中,这意味着它们不会被释放,并且将保持活动状态并泄漏内存。

在您的情况下,我强烈建议您分析您的应用。像Allocations / Leaks一样使用XCode instruments。检查视图控制器/导航控制器实例是否应该释放内存。如果内存泄漏,请找出控制器保留的代码中的位置。

以下是Raywenderlich's site关于如何在代码中查找内存泄漏的好教程。