下面是代码,但这也是一个概念性问题。问题:以下方法是否以正确的方式通过视图控制器?这很广泛,所以让我补充一些具体细节。
假设您在View A中。此视图显示了转到View B或View C的选项。用户做出选择后(i)我想加载新视图和(ii)用户不会回到View A.(另外,顺便说一下,View A是我最初的rootViewController。)
所以,假设我在视图A中连接两个按钮,每个按钮加载其各自的视图。这是一种有效/可行的方法:
- (IBAction)loadViewB:(id)sender
{
ViewBController *viewBController = [[ViewBController alloc] initWithNibName:Nil bundle:Nil];
[self.view.superview insertSubview:viewBController.view atIndex:0];
[self.view removeFromSuperview];
}
- (IBAction)loadViewC:(id)sender
{
ViewCController *viewCController = [[ViewCController alloc] initWithNibName:Nil bundle:Nil];
[self.view.superview insertSubview:viewCController.view atIndex:0];
[self.view removeFromSuperview];
}
“insertSubview:atIndex:”方法似乎是正确的,基于Apple's View Controller Programming Guide。此外,代码工作。但是我应该调用“removeFromSuperview”吗?或者我应该把它们堆叠起来? (如果有人对记忆管理有任何意见,我会全力以赴。)
另外:
我知道这是一个简单的问题,但我只想确保我对文档的理解是正确的,并且一般都掌握了这个概念。
提前谢谢。
答案 0 :(得分:1)
我认为你的方法没有任何问题。请注意,简单[self.view removeFromSuperview]
可能不会导致任何内存被释放,例如,如果您的应用程序委托持有对根视图控制器的引用。将此视图切换职责交给app委托可能是个好主意,因此它可以根据需要选择释放对根视图控制器的引用。