更改导航控制器时,我的子视图会发生什么?

时间:2012-02-27 23:45:23

标签: iphone ios uiview

假设我在视图中添加了一个子视图,如下所示:

[[self addSubview:myView];

然后我将一个新视图推送到navigationController堆栈,如下所示:

[self.navigationController pushViewController:otherView animated:YES];

我添加到原始视图的子视图会发生什么。它会自动删除吗?

另外,如果我的程序调用此行:

[[self addSubview:myView];

多次没有删除视图会做什么坏事如创建内存泄漏?

3 个答案:

答案 0 :(得分:3)

首先,要更加小心你所说的话。您没有向viewcontrollers添加子视图,您将子视图添加到视图,即(self是一个视图控制器)

[self.view addSubView:myView];

此外,您不推送视图,而是视图控制器,即

[self.navigationController pushViewController:otherViewController animated:YES];

现在有了上面的第一个语句,视图有了一个新的子视图。如果通过navigationcontroller(第二个语句)在原始视图上推送新视图,则这不会真正影响原始视图。因此,弹出新视图(控制器)后,您添加的子视图仍然存在。

这样看:你的第一个视图控制器有一个名为View1的视图。你向View1添加了一个子视图,很好。现在,使用UINavigationController的推送会在旧视图控制器上推送新视图 controller ,因此您现在可以看到它的视图View2。这与View1无关。

要回答第二个问题,请参阅Add same subview multiple times to view

简短回答,视图将被删除并立即插入到父视图中。所以,虽然毫无意义,但不会发生任何不好的事情(子视图只会被推到前面)。

答案 1 :(得分:0)

好吧,你总是可以使用XCode附带的测试工具来检查内存泄漏,但是我相信当你调用pushViewController时它会留下另一个视图。此外,如果您正在使用UINavigationController,它会自动为您提供一个很好的后退按钮以返回上一个视图。

答案 2 :(得分:0)

如果您致电[self.view addSubview: myView];然后致电[self.navigationController pushViewController: otherViewController animated:YES];,则不会自动从myView移除self.view。多次调用[self.view addSubview: myView];而不删除myView,似乎毫无意义,但您不会创建内存泄漏。

相关问题