Ios 设置appdelegate';窗口根视图控制器

Ios 设置appdelegate';窗口根视图控制器,ios,ipad,uinavigationcontroller,appdelegate,uiwindow,Ios,Ipad,Uinavigationcontroller,Appdelegate,Uiwindow,在基于用户选择的Home ViewController中,我必须加载选定的ViewController。为此,我将AppDelegate.window.rootViewController更改为使用所选视图控制器初始化的navigationcontroller 例: 这一切都很好,但我的问题是:从selectedViewController,我导航到一些n个ViewController,最后通过设置appdelegate的rootviewcontroller来加载HomeViewControll

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

例:

这一切都很好,但我的问题是:从selectedViewController,我导航到一些n个ViewController,最后通过设置appdelegate的rootviewcontroller来加载HomeViewController

navigationController = [[UINavigationController alloc] initWithViewController:homeViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;
这会清除我以前的navigationController导航堆栈吗?还是应该从外部清除阵列?请解释一下当我们将导航控制器分配给appdelegate的窗口rootviewcontroller时会发生什么


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

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

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

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


这是一个很好的教程,介绍如何在代码中查找内存泄漏。

为什么每次都要重置rootviewcontroller?我不想更改它的现有代码。可能是出于某种目的,但在这里,当我更改rootviewcontroller时,我必须确保导航堆栈为空。
navigationController = [[UINavigationController alloc] initWithViewController:homeViewController];
[UIApplication delegate].window.rootviewcontroller = navigationController;