2012-01-03 59 views
1

如下面的代码:如果UIViewController在从navigationController弹出时会被放弃?

UIViewController *controller = [[UIViewController alloc] init]; 
[controller.view addSubView:myOtherController.view]; 
[self.navigationController pushViewController:controller]; 
[controller release]; 

而且myOtherController是一个全局对象,它不会被释放。 所以问题是,当控制器弹出时,它是否会被释放? 如果它不会被释放,我该如何验证? 谢谢!

回答

2

它会在弹出时被释放。 UINavigationController保留推送视图控制器,当然,弹出时释放它们。

编辑:对象所有权是定向关联 - 但不是树:对象A拥有对象B,而B可以被任何数量的其他对象所拥有。

弹出的控制器拥有其视图,反过来,它拥有子视图。当弹出的控制器被释放时,它释放其释放共享子视图的视图。共享的子视图仍然由其他对象拥有,所以它不会被释放。

这就是引用计数的思想。

+0

谢谢!但弹出的控制器有一个没有被释放的子视图。我不确定弹出的控制器是否会在这种情况下被释放。那么你能进一步解释吗?非常感谢你! – wjldxt 2012-01-04 04:43:25

+0

控制器保留它的视图,保留它的子视图等。但视图不保留超视图或控制器,因此它将被释放。 – Zoleas 2012-01-04 08:55:43

+0

谢谢你的解释! – wjldxt 2012-01-05 13:16:18

相关问题