iOS:内存中的导航控制器对象

时间:2012-09-04 06:33:45

标签: ios

我正在开发iOS导航控制器应用程序并且有疑问。我无处可寻。当我创建导航控制器并使用多个其他视图控制器进行导航时,这些视图控制器如何准确存储在内存中,导航控制器可以在我们点击后退按钮等时导航到上一个控制器。有人可以解释一下吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

UINavigationController存储其他视图控制器。显示视图控制器时,将其推送到导航控制器:

[navigationController pushViewController:viewController animated:YES];

这意味着导航控制器会保留对视图控制器的引用,以便它不会被释放。类似地,您弹出一个视图控制器来显示前一个。此时,释放对当前视图控制器的引用。请注意,即使您的视图控制器不会被释放,它仍然可以像往常一样卸载和重新加载。

答案 1 :(得分:1)

这个概念作为一个堆栈很简单。你推了一个对象,你也可以弹出它。 当你使用

[navigationController pushViewController:viewController animated:YES];

它将对象(此处为viewController)推送到您可以使用[navigationController viewControllers];

访问的viewControllers堆栈 你可以检查现有的控制器:

NSLog("view controllers %@", [navigationController viewControllers]);

viewControllers是一个NSArray,其中包含所有对象。因此,对特定控制器的引用始终存在,因此您可以导航回任何视图控制器

单击后退按钮会弹出数组中的topViewControllerpopToRootViewController弹出到viewController数组中添加的第一个控制器。

你也可以使用

弹回数组中的特定控制器
[self.navigationController popToViewController: animated:];

你需要从已经提到的NSArray(viewControllers)传递参数,例如:

[self.navigationController popToViewController:[[navigationController viewControllers] objectAtIndex:1] animated:YES];
希望它有所帮助。快乐的编码:)