0

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

谢谢你。

4

2 回答 2

1

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

[navigationController pushViewController:viewController animated:YES];

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

于 2012-09-04T06:46:45.527 回答
1

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

[navigationController pushViewController:viewController animated:YES];

它将对象(此处为视图控制器)推送到您可以使用的视图控制器堆栈中[navigationController viewControllers];

你可以检查现有的控制器:

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

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

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

您还可以使用弹回数组中的特定控制器

[self.navigationController popToViewController: animated:];

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

[self.navigationController popToViewController:[[navigationController viewControllers] objectAtIndex:1] animated:YES];

希望能帮助到你。快乐编码:)

于 2012-09-04T07:41:25.977 回答