【问题标题】:If the UIViewController will be relesed when popped from the navigationController?如果从navigationController弹出时会释放ViewController?
【发布时间】:2012-01-03 12:47:33
【问题描述】:

如下代码:

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

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

【问题讨论】:

    标签: objective-c ios release


    【解决方案1】:

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

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

    弹出的控制器拥有它的视图,而后者又拥有子视图。当弹出的控制器被释放时,它会释放它的视图,从而释放共享的子视图。共享子视图仍归某个其他对象所有,因此不会被释放。

    这就是引用计数的思想。

    【讨论】:

    • 谢谢!但是弹出的控制器有一个尚未发布的子视图。我不确定在这种情况下是否会释放弹出的控制器。那么你能进一步解释一下吗?非常感谢!
    • 控制器保留它的视图,保留它的子视图等。但是视图不保留父视图或控制器,所以它会被释放。
    • 感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多