我正在开发iOS导航控制器应用程序并且有疑问。我无处可寻。当我创建导航控制器并使用多个其他视图控制器进行导航时,这些视图控制器如何准确存储在内存中,导航控制器可以在我们点击后退按钮等时导航到上一个控制器。有人可以解释一下吗?
谢谢。
答案 0 :(得分:1)
UINavigationController存储其他视图控制器。显示视图控制器时,将其推送到导航控制器:
[navigationController pushViewController:viewController animated:YES];
这意味着导航控制器会保留对视图控制器的引用,以便它不会被释放。类似地,您弹出一个视图控制器来显示前一个。此时,释放对当前视图控制器的引用。请注意,即使您的视图控制器不会被释放,它仍然可以像往常一样卸载和重新加载。
答案 1 :(得分:1)
这个概念作为一个堆栈很简单。你推了一个对象,你也可以弹出它。 当你使用
[navigationController pushViewController:viewController animated:YES];
它将对象(此处为viewController)推送到您可以使用[navigationController viewControllers];
NSLog("view controllers %@", [navigationController viewControllers]);
viewControllers是一个NSArray,其中包含所有对象。因此,对特定控制器的引用始终存在,因此您可以导航回任何视图控制器
单击后退按钮会弹出数组中的topViewController
。
popToRootViewController
弹出到viewController数组中添加的第一个控制器。
你也可以使用
弹回数组中的特定控制器[self.navigationController popToViewController: animated:];
你需要从已经提到的NSArray(viewControllers)传递参数,例如:
[self.navigationController popToViewController:[[navigationController viewControllers] objectAtIndex:1] animated:YES];
希望它有所帮助。快乐的编码:)