查看控制器内存分配和释放 - 正确的方法是什么

时间:2012-04-20 01:22:56

标签: ios

我今天想知道一些事情。

假设我在我的根MyViewController *myViewController接口中声明了一个属性UIViewController并实现它(合成,发布,卸载等)。

然后我有一个函数loadMyView()

- (void)loadMyView {
    if (!self.myViewController)
        self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    [self.view addSubview:self.myViewController.view];
}

- (void)hideMyView {
    [self.myViewController.view removeFromSuperview];
}

这些功能可以多次使用。

问题是,一旦我隐藏了视图,我就不再需要它以及它的内容和当前状态了。那么从内存中删除它的正确方法是什么,允许我稍后再次分配(从而省略if方法中的loadMyView语句)以及为什么?

由于其他原因,我需要有一个强大的指向对象的指针,这就是为什么我不创建临时对象然后释放它。

hideMyView做我:

  1. self.myViewController = nil;
  2. [self.myViewController release];
  3. 或3.初始化时自动释放内存:self.myViewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]autorelease];(但什么时候发布?)

    还是比较新的。

1 个答案:

答案 0 :(得分:3)

你的问题令人困惑的是loadview是UIViewController类中的方法之一。覆盖第一个视图控制器的loadview方法以初始化第二个视图控制器并将第二个视图控制器的视图属性添加到第一个视图控制器的视图属性是没有意义的。我不认为你的问题为任何人提供了足够的背景,可以给你一个明智的答案。