我正在开发一个 iOS 导航控制器应用程序并且有疑问。我在任何地方都找不到它。当我创建导航控制器并使用多个其他视图控制器进行导航时,这些视图控制器如何准确存储在内存中,当我们单击后退按钮等时,导航控制器可以导航到前一个控制器。有人可以解释一下吗?
谢谢你。
我正在开发一个 iOS 导航控制器应用程序并且有疑问。我在任何地方都找不到它。当我创建导航控制器并使用多个其他视图控制器进行导航时,这些视图控制器如何准确存储在内存中,当我们单击后退按钮等时,导航控制器可以导航到前一个控制器。有人可以解释一下吗?
谢谢你。
UINavigationController 存储其他视图控制器。显示视图控制器时,将其推送到导航控制器:
[navigationController pushViewController:viewController animated:YES];
这意味着导航控制器保留对您的视图控制器的引用,因此它不会被释放。同样,您弹出一个视图控制器以显示前一个。此时对当前视图控制器的引用被释放。请注意,即使您的视图控制器不会被释放,它仍可能像往常一样被卸载和重新加载。
这个概念很简单,就像一个堆栈。你推一个对象,你也可以弹出它。当你使用
[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];
希望能帮助到你。快乐编码:)