解除/呈现模态视图控制器-内存?

5

当您关闭模态视图控制器时,该视图控制器对象是否被销毁?

如果再次表示相同的视图控制器,它会重新加载吗?例如,“view did load”和“init”方法是否被调用?

1个回答

3
释放对象是您自己的责任,因此您应该在调用presentModalViewController之后或稍后释放视图控制器本身(不建议)。例如:
MyController *controller = [[MyController alloc] init];

[self presentModalViewController:controller animated:YES];

// "controller" is automatically retained, so you can call release right away    

[controller release];

稍后调用 dismissModalViewController 将自动释放保留的控制器。

它只是一个,但这并不重要。考虑对象所有权,而不是保留计数。你始终负责释放任何你分配或保留的东西。一直如此。 - Philippe Leybaert
谢谢。我有一个奇怪的问题,但是我无法解决它。我正在使用以下结构。一个方法(就像您上面列出的方法)在主菜单中呈现视图控制器(通过视图控制器中的单例方法)。然后,该视图控制器启动游戏对象(NSOBject的子类)并将一个视图分配给该对象。当游戏结束时,游戏对象告诉视图控制器关闭自己。奇怪的是,在前两次游戏结束时,这样可以返回到主菜单,但是第三次应用程序会崩溃,并显示“Main”中的错误。 - GuybrushThreepwood
如果我在视图控制器的dealloc方法中删除"super dealloc"命令,这将解决问题。另外,如果我在上面的示例中删除[controller release]这一行,也可以解决问题。我不确定发生了什么。 - GuybrushThreepwood
你可能存在alloc/retain和release/autorelease的问题。但是如果没有看到完整的代码,很难确定发生了什么。(在stackoverflow上展示完整的代码可能不是一个好主意) - Philippe Leybaert
谢谢Phillippe - 你能给我一些要检查的常规事项吗?例如,可能是视图控制器本身还是视图控制器中的对象? - GuybrushThreepwood
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接