2009-09-21 175 views
1

我在我的主UIViewController(主菜单)上有几个按钮,它在主菜单的顶部创建并添加了一个子视图UIViewController。当我删除子视图时,该控制器的内存未被释放。我怎样才能立即释放子视图内存?iPhone - dealloc subview UIViewController removeFromSuperview

有没有人有一个例子?这将解决我所有的问题!提前致谢。

这是我如何添加一个子视图

if((UIButton *) sender == gameClassicBtn) { 
     GameClassic *gameClassicController = [[GameClassic alloc] 
          initWithNibName:@"GameClassic" bundle:nil]; 
     self.gameClassic = gameClassicController; 
     [gameClassicController release]; 
     [self.view insertSubview:gameClassicController.view atIndex:1]; 
    } 

回答

0

根据您提供有可能至少有两个地方被保留的UIViewController的代码 - 一个由视图层次结构(self.view)和其他由一个成员变量(self.gameClassic)。这听起来像你只是释放视图heirarchy引用,而不是成员变量。如果你释放后者,它会释放UIViewController吗?

+0

我从来没有发布任何内容的主菜单代码......这是上面的代码所在。我不知道如何告诉那个文件,我从视图中删除了gameClassic.h。我通过[self.view removeFromSubview]移除了该子视图;为了回到我的主菜单。 – bbullis21 2009-09-21 17:17:41

+0

基本上我的问题是我打电话通过单击主菜单按钮来插入子视图。短暂的游戏结束后,我执行removeFromSubview,该子视图中的内存不会立即释放。所以如果他们在主菜单上选择不同的按钮,它会加载另一个子视图,并且objectalloc会继续构建。 – bbullis21 2009-09-21 17:19:15

+0

我暂时(强调暂时)重写你的GameClassic类中的retain和release,并在每个类中放置一个断点。这样你就可以看到你的实例被保留和释放的时间,从而可以找出需要删除多余ref的次数。 – fbrereto 2009-09-21 17:23:12