我有一个自定义容器 UIViewController,它有六个子 UIViewController 和一组选项卡,用户可以与之交互以在 subview Controller 之间切换。问题是当我的容器 View Controller 被释放时, subview Controller 却没有。
我已经通过向它们的 dealloc 方法添加一些调试代码来验证 subview Controller 没有被释放,并且只要它们的 View 没有被添加到容器 View Controller 的 View 中它们就会被释放。
下面是我用来创建自定义容器 View Controller 的代码的摘录。 viewController 指针是 iVar。我也在使用 ARC,所以这就是没有实际发布调用的原因。
- (void)init
{
if ((self = [super init])) {
vc1 = [[UIViewController alloc] init];
[self addChildViewController:vc1];
vc2 = [[UIViewController alloc] init];
[self addChildViewController:vc2];
vc3 = [[UIViewController alloc] init];
[self addChildViewController:vc3];
vc4 = [[UIViewController alloc] init];
[self addChildViewController:vc4];
vc5 = [[UIViewController alloc] init];
[self addChildViewController:vc5];
vc6 = [[UIViewController alloc] init];
[self addChildViewController:vc6];
}
return self;
}
- (void)dealloc
{
[vc1 removeFromParentViewController];
vc1 = nil;
[vc2 removeFromParentViewController];
vc2 = nil;
[vc3 removeFromParentViewController];
vc3 = nil;
[vc4 removeFromParentViewController];
vc4 = nil;
[vc5 removeFromParentViewController];
vc5 = nil;
[vc6 removeFromParentViewController];
vc6 = nil;
}
- (void)switchFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
if (fromViewController) {
[fromViewController.view removeFromSuperview];
}
[self.view addSubview:toViewController];
toViewController.view.frame = self.view.bounds;
}
你们都知道我做错了什么吗?
最佳答案
这不是添加和删除 subview Controller 的方式
[childViewController willMoveToParentViewController:nil];
[childViewController view] removeFromSuperview];
[childViewController removeFromParentViewController];
删除和添加的方法是
[parentViewController addChildViewController:childViewController];
[parentViewController.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:parentViewController];
关于ios - 容器 UIViewController 不释放它的 subview Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844432/