内存管理问题(发布UIVIewCotroller)

时间:2011-04-02 15:27:57

标签: ios memory-management uiview memory-leaks uiviewcontroller

我为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(或者我需要释放控制器中的所有子层?)。

请有人帮助我。 提前谢谢。

1 个答案:

答案 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变量(每次))