我有一个自定义容器 UIViewController,它有六个子 UIViewController,以及一组与用户交互以在子视图控制器之间切换的选项卡。问题是当我的容器视图控制器被释放时,子视图控制器没有。
我已经通过在其 dealloc 方法中添加一些调试代码来验证子视图控制器不会被释放,并且只要它们的视图没有被添加到容器视图控制器的视图中,它们就会被释放。
下面是我用来创建自定义容器视图控制器的代码摘录。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;
}
你们都知道我做错了什么吗?