自动释放ViewController内存管理

时间:2011-12-08 01:02:19

标签: iphone objective-c ios xcode cocoa-touch

在我的mainViewController中,我正在添加另一个ViewController的视图。完成后我将删除它的视图。管理这个的正确方法是什么?我在哪里发布视图控制器?

mainVc.m
-(void)showView {

  helpPage *elementController = [[helpPage alloc] init];
  [self.view addSubview:elementController.view];

}

helpPage.m
-(void)removeView {

  [self.view removeFromSuperview];

}

2 个答案:

答案 0 :(得分:0)

由于您在mainVc的该实例中的控制器上调用了alloc init,因此mainVc的该实例拥有释放控制器的权限。

当它调用addSubView时,它将保留视图(并添加到视图层次结构),当它从superview中删除时,它将被释放。此时,当它被释放时,创建视图的控制器仍然保留它。当两者都释放了视图时,它就会消失。

这是一篇相关的SO帖子:

Does UIView's addSubview really retain the view?

答案 1 :(得分:0)

我认为你正在寻找像这样的东西

mainVc.m
-(void)showView {

  helpPage *elementController = [[helpPage alloc] init];
  [self.view addSubview:elementController.view];
  [elementController release];

}

helpPage.m
-(void)removeView {

  [self.view removeFromSuperview];

}

当然,我还没有看到你的其余代码,所以这可能不是你想要的。但是,就内存分配而言,只要您alloc某事,就必须在以后发布。对于视图和视图控制器,一旦添加了该视图或视图控制器,您就可以release复制“分配”。