在基于视图的应用程序中,我显示一个视图,一旦用户完成该视图,单击完成并删除视图。但是,这并没有取消视图,这是我想要做的。解除此类视图的正确方法是什么?
目前,在调用第二个视图之前,我已经没有了。这似乎有效,第二种观点重新初始化。但是,第二个视图是否更适合自我毁灭(在removeFromSuperview之后为零)?
在第一个视图中:
//show next view
aView = nil;
if(aView == nil)
{
aView = [[AView alloc] initWithNibName:@"aView" bundle:nil];
}
[self.view addSubview: aView.view];
单击“在视图中完成”
[self.view removeFromSuperview];
答案 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中进行记忆管理的正确理论。
根据开发文档:
callling removeFromSuperview实际上会为你发布释放,所以你没事,我想。