当我的容器 UIViewController 被解除分配或卸载时,我必须清理我的子 UIViewControllers 吗?
Posted
技术标签:
【中文标题】当我的容器 UIViewController 被解除分配或卸载时,我必须清理我的子 UIViewControllers 吗?【英文标题】:Must I cleanup my child UIViewControllers when my container UIViewController is dealloc-ed or unloaded? 【发布时间】:2012-06-12 20:59:54 【问题描述】:我正在创建一个简单的容器 UIViewController
和一个子 UIViewController
。
我是否需要在我的容器UIViewController
的dealloc
和viewDidUnload
方法中发送孩子willMoveToParentViewController:
和removeFromParentViewController
?
我正在使用ARC
【问题讨论】:
【参考方案1】:这可能会迟到,但我遇到了同样的问题。我用 NSLog 进行了测试,并且没有在子控制器上调用 dealloc 方法。
在我的例子中,我的父控制器有一个子控制器,但这个父控制器也是另一个超级父控制器的子控制器。
所以,我的解决方案是实现 willMoveToParentViewController 并删除那里的孩子。
- (void) willMoveToParentViewController:(UIViewController *)parent;
if (parent == nil)
NSLog(@"removing my self");
[_childViewController willMoveToParentViewController:nil];
[_childViewController removeFromParentViewController];
[_childViewController.view removeFromSuperview];
_childViewController = nil;
但是,在我的例子中,我调用这个方法是因为这个父级是另一个父级控制器的子级。
// removing the parent from super parent controller
[_parentViewController willMoveToParentViewController:nil];
[_parentViewController removeFromParentViewController];
[_parentViewController.view removeFromSuperview];
_parentViewController = nil;
虽然我不知道你的情况,但希望这能帮助其他可能与我有同样问题的人。
【讨论】:
以上是关于当我的容器 UIViewController 被解除分配或卸载时,我必须清理我的子 UIViewControllers 吗?的主要内容,如果未能解决你的问题,请参考以下文章
当我的 UIViewController 被弹出时调用的方法?