我正在学习 UINavigationController 和 UIViewController。这是我构建的简单应用程序。请注意,我使用的是 ARC。
我的应用有一个导航 Controller 和两个 View Controller (我们称它们为 FirstViewController 和 SecondViewController)。当应用程序启动时,导航 Controller 将 FirstViewController 插入堆栈。
在 FirstViewController 中,我有一个按钮,它在触摸时插入 SecondViewController。这是一些代码。
FirstViewController.m
-(IBAction)pushSecondViewController
{
SecondViewController *secondViewController = [SecondViewController alloc]init];
[self.navigationController pushViewController:secondViewController animated:YES];
}
在第二个 View Controller 中,我有一个按钮可以从堆栈中弹出当前 View Controller 。
SecondViewController.m
-(IBAction)popViewController
{
[self.navigationController popViewControllerAnimated:YES];
}
到目前为止,还不错。这是我的问题:
navigationController 是否检查 SecondNavigationController 的现有实例,如果不存在则创建一个新实例?
如果不是,我是否应该使用单例来确保只创建和重用一个实例,而不是每次按下按下 SeconViewController 的按钮时都创建一个新实例?
最佳答案
使用您当前的代码,第二个 View Controller 将在从堆栈中弹出时被销毁,所以不,导航 Controller 不会重新使用它。
如果你真的想保留第二个 View Controller ,让它成为第一个 View Controller 的强属性,但不要这样做,除非你确实有理由这样做 - 你使用的方法是标准的并且创建一个新的 View Controller 通常比使用甚至不在屏幕上的 View Controller 占用大量内存更受欢迎。内存比处理器资源更稀缺,创建 View Controller 一直在发生。
关于objective-c - UINavigationController 和 UIViewController 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656326/