如果从navigationController弹出时会释放ViewController?
Posted
技术标签:
【中文标题】如果从navigationController弹出时会释放ViewController?【英文标题】:If the UIViewController will be relesed when popped from the navigationController? 【发布时间】:2012-01-03 12:47:33 【问题描述】:如下代码:
UIViewController *controller = [[UIViewController alloc] init];
[controller.view addSubView:myOtherController.view];
[self.navigationController pushViewController:controller];
[controller release];
而myOtherController是一个全局对象,不会被释放。 那么问题来了,当控制器弹出时,是否会被释放? 如果它不会被释放,我该如何验证呢? 谢谢!
【问题讨论】:
【参考方案1】:它会在弹出时释放。 UINavigationController
保留推送的视图控制器,当然,在弹出时释放它们。
编辑:对象所有权是一种定向关联,但不是树:对象 A 拥有对象 B,而 B 可以由任意数量的其他对象拥有。
弹出的控制器拥有它的视图,而后者又拥有子视图。当弹出的控制器被释放时,它会释放它的视图,从而释放共享的子视图。共享子视图仍归某个其他对象所有,因此不会被释放。
这就是引用计数的思想。
【讨论】:
谢谢!但是弹出的控制器有一个尚未发布的子视图。我不确定在这种情况下是否会释放弹出的控制器。那么你能进一步解释一下吗?非常感谢! 控制器保留它的视图,保留它的子视图等。但是视图不保留父视图或控制器,所以它会被释放。 感谢您的解释!以上是关于如果从navigationController弹出时会释放ViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何从导航堆栈中推送/弹出uiviewcontroller时收到警报
如何从自定义 UIGestureRecognizer 触发 NavigationController 的 interactivePopGestureRecognizer
从 NavigationController 中移除 ViewController 后 AVPlayer 继续播放
TabBarController + NavigationController:推送和弹出问题