首页 文章

设置appdelegate'窗口rootviewcontroller

提问于
浏览
-1

在基于用户选择的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 回答

  • 1

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

  • 1

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

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

    这是一个关于如何在代码中查找内存泄漏的Raywenderlich's site的好教程 .

相关问题