2012-02-27 54 views
0

比方说,我一个子视图添加到我的观点,这样的:更改导航控制器时,我的子视图会发生什么变化?

[[self addSubview:myView]; 

然后我推新视图到navigationController堆栈,像这样:

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

发生了子视图那是什么我添加到原始视图。它是否被自动删除?

而且,如果我的程序调用该行:不删除的观点并认为做什么坏事一样创建一个内存泄漏

[[self addSubview:myView]; 

多次?

回答

3

首先,要小心你说的话。您不添加子视图viewcontrollers,添加子视图的观点,即(self是一个视图控制器)

[self.view addSubView:myView]; 

而且,你不推的观点,但viewcontrollers,即

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

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

看到它那样:你的第一个视图控制器有一个叫做View1的视图。你向View1添加了一个子视图,很好。现在使用UINavigationController进行推送,在您的旧视图控制器上推动新视图控制器,所以您现在可以看到其视图View2。这与View1无关。

要回答你的第二个问题,看Add same subview multiple times to view

简短的回答,认为将从中删除,并立即插入父视图。所以,毫无意义的是,没有什么不好的事情会发生(子视图会被推到前面)。

+1

弹出后子视图可能不在那里。如果您的应用程序收到内存警告,隐藏的视图控制器将清除其视图以释放内存。当再次调用viewDidLoad时,您应该准备重新创建并重新添加子视图。 – jsd 2012-02-28 01:34:12

0

那么,你总是可以使用XCode附带的测试工具来检查内存泄漏,但是我相信当你调用pushViewController时,它会让其他视图保持完好。另外,如果您使用的是UINavigationController,它会自动放置一个很好的后退按钮,让您返回到前一个视图。

0

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

相关问题