ios - 容器 UIViewController 不释放它的 subview Controller

标签 ios uiviewcontroller automatic-ref-counting

我有一个自定义容器 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/

相关文章:

ios - MDM 客户端-服务器通信

ios - 如何检查 NSDate 是否在特定月份?

ios - 圆弧错误 : cannot capture __autoreleasing variable in a block

ios - Swift 中的 ARC 不可用方法

iOS:ARC 不允许使用 CFTypeRef

ios - 在测试中共享两个 iOS 应用程序之间的信息

ios - 无法设置我的导航栏标题的字体大小

ios - 如何创建按下 UITableViewRowAction 时显示的编辑模态视图 Controller ?

ios - 带有在另一个类中声明的 pushViewController 的 UIButton

ios - 遏制和 UITableView flashScrollIndicators