我为iPad开发游戏(从拼图中组合图像)。在我的菜单中,我选择难度级别(简单,中等或硬)。选择主赛后将显示。 在这里,我创造了主要的比赛场地:
- (void)simpleDiffButtonClicked:(id)sender
{
UIButton *button = sender;
if (simpleDiffButton == button) {
UIView *mySuperView = self.view.superview;
mainGame = [[MainGame alloc] initWithMode:1 andImage:nil]; //mainGame variable is declared in header file like: MainGame *mainGame;
mainGame.view.frame = CGRectMake(0, 0, 1024, 768);
[mySuperView addSubview: mainGame.view];
}
}
出现此游戏区域后(有很多子图层添加到self.view.layer),我可以与它进行交互。当我想退出时,我点击“返回”按钮。 (这里我想发布我的viewcontroller)
- (void)backToMenuButtonClicked:(id)sender
{
UIButton *button = sender;
if (nextImageClick == YES) {
return;
}
if (backToMenuButton == button) {
self.view.layer.sublayers = nil; //here's an exception
[self.view removeFromSuperview];
}
}
点击“返回”按钮后一切正常。我可以再次选择难度级别。 A选择一个级别,然后再次单击“返回”按钮并在此处应用程序崩溃(EXC_BAD_ACCESS)。 据我所知,“ self.view.layer.sublayers = nil ”会导致异常。 没有它一切都很好。但记忆正在泄漏。几分钟后,应用程序崩溃(内存警告2)。 大约一个星期我无法解决问题。我不明白如何释放我的viewcontroller(或者我需要释放控制器中的所有子层?)。
请有人帮助我。 提前谢谢。
答案 0 :(得分:0)
尝试打开NSZombieEnabled并在它崩溃时查看调试器和控制台,它可以提供有关该问题的更多信息。
P.S。 NSZombieEnabled:http://www.cocoadev.com/index.pl?NSZombieEnabled(您可能想尝试使用.gdbinit)。
P.P.S: 顺便说一句,“mainGame = [[MainGame alloc] initW ...”这一行可能还有其他一些问题。 - 调用[mainGame发布]的地方? (它应该被称为simpleDiffButtonClicked,它将MainGame的新实例分配给mainGame变量(每次))