-1

在基于用户选择的主视图控制器中,我将不得不加载选定的视图控制器。为此,我将 AppDelegate.window.rootViewController 更改为使用选定视图控制器启动的导航控制器。

前任:

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

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

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

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

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

4

2 回答 2

1

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

于 2013-06-14T10:44:28.680 回答
1

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

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

这是Raywenderlich 网站上关于如何在代码中查找内存泄漏的一个很好的教程。

于 2013-06-14T11:11:03.540 回答