正确释放视图

时间:2009-12-29 22:58:39

标签: iphone cocoa-touch memory-management uiview

在基于视图的应用程序中,我显示一个视图,一旦用户完成该视图,单击完成并删除视图。但是,这并没有取消视图,这是我想要做的。解除此类视图的正确方法是什么?

目前,在调用第二个视图之前,我已经没有了。这似乎有效,第二种观点重新初始化。但是,第二个视图是否更适合自我毁灭(在removeFromSuperview之后为零)?

在第一个视图中:

//show next view
aView = nil;
if(aView == nil)
{
  aView = [[AView alloc] initWithNibName:@"aView" bundle:nil];
}
[self.view addSubview: aView.view];

单击“在视图中完成”

[self.view removeFromSuperview];

4 个答案:

答案 0 :(得分:1)

之后
[self.view addSubview: aView.view];

你应该添加:

[aView release];

您的子视图已被视图控制器的视图保留,因此可以发布。

答案 1 :(得分:1)

方法removeFromSuperview将自动释放“aView.view”,因此您不应在第一个视图控制器中释放aView。我认为你在头文件中声明了AView *aView,但你不需要。您可以将aView声明为本地变量,如下所示:

// go to second view
SecViewController *sec = [[SecViewController alloc] initWithNibName:@"SecView" bundle:nil];
[self.view addSubview:sec.view];

// go back
[self.view removeFromSuperview];

答案 2 :(得分:1)

如果您之前将viewController设置为第一响应者状态(比如响应运动事件),响应者链将保留控制器。您必须重新签署第一个响应者才能完全销毁控制器。

[self resignFirstResponder];
[self.view removeFromSuperview];

答案 3 :(得分:0)

上述两个答案都是关于如何在目标c中进行记忆管理的正确理论。

根据开发文档:

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/removeFromSuperview

callling removeFromSuperview实际上会为你发布释放,所以你没事,我想。