![](/img/trans.png)
[英]How to check a uiviewcontroller is present in uinavigationcontroller stack
[英]How UINavigationController and UIViewController works?
我正在学习UINavigationController
和UIViewController
。 这是我构建的简单应用程序。 请注意,我使用ARC。
我的应用程序有一个导航控制器和两个视图控制器(我们称之为FirstViewController
和SecondViewController
)。 当应用程序启动时,导航控制器将FirstViewController
推FirstViewController
堆栈上。
在FirstViewController
我有一个按钮,可以在触摸时按下SecondViewController。 这是一些代码。
FirstViewController.m
-(IBAction)pushSecondViewController
{
SecondViewController *secondViewController = [SecondViewController alloc]init];
[self.navigationController pushViewController:secondViewController animated:YES];
}
在第二个视图控制器中,我有一个按钮,从堆栈中弹出当前视图控制器。
SecondViewController.m
-(IBAction)popViewController
{
[self.navigationController popViewControllerAnimated:YES];
}
到现在为止还挺好。 这是我的问题:
navigationController是否检查SecondNavigationController
的现有实例,如果不存在则会创建一个新实例?
如果没有,我应该使用单例来确保每次触摸推动SeconViewController
的按钮时,只创建并重用一个实例而不是创建一个新实例吗?
使用当前代码,第二个视图控制器在从堆栈弹出时将被销毁,因此,导航控制器不会重复使用它。
如果你真的想要保留第二个视图控制器,使它成为第一个视图控制器的强大属性,但除非你实际有理由,否则不要这样做 - 你正在使用的方法是标准的并且创建一个新的视图控制器通常首选占用大量内存,而视图控制器甚至不在屏幕上。 内存比处理器资源更稀缺,创建视图控制器一直在发生。
我同意jrturton,并添加以下指南。
首先,在我看来,将控制器作为单身人士并不是一个好主意。
然后,你必须检查一下UINavigationController
“controllers array”中是否存在某种类型的实例。
@property(nonatomic, copy) NSArray *viewControllers
最后,您可以为您的控制器创建一个强大的参考,但它根本没有必要。 它很快就能创建一个新的控制器。 如果有的话,我会缓存上面显示的数据,而不是强烈引用它。 这样可以避免用户等待已下载的数据。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.