如果从navigationController弹出UIViewController将被释放?

时间:2012-01-03 12:47:33

标签: objective-c ios release

如下代码:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

弹出的控制器拥有其视图,而视图又拥有子视图。当弹出的控制器被释放时,它会释放其视图,从而释放共享的子视图。共享子视图仍然由其他一些对象拥有,因此它不会被释放。

这就是引用计数的想法。