假设我在视图中添加了一个子视图,如下所示:
[[self addSubview:myView];
然后我将一个新视图推送到navigationController堆栈,如下所示:
[self.navigationController pushViewController:otherView animated:YES];
我添加到原始视图的子视图会发生什么。它会自动删除吗?
另外,如果我的程序调用此行:
[[self addSubview:myView];
多次没有删除视图会做什么坏事如创建内存泄漏?
答案 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
,似乎毫无意义,但您不会创建内存泄漏。