我在mainViewController上有一个按钮,可以点击打开另一个视图。
-(void)buttonTap:(id)sender
{
GameViewController *gameViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:[NSBundle mainBundle]];
Level *level = [levels objectAtIndex:currentLevelNumber];
gameViewController.level = level;
UIView *gameview = gameViewController.view;
gameview.frame = CGRectMake(0, 0, 480, 320);
CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI/2.0);
[gameview setTransform:rotate];
gameview.center = CGPointMake(160, 240);
[[self.view window] addSubview:gameview];
[gameViewController release];
gameViewController = nil;
}
在gameViewController中,我有另一个关闭自己的按钮。
-(IBAction)buttonTap:(id)sender
{
[self.view removeFromSuperview];
//[self.view release];
}
我在gameViewController中有一个计时器,即使在关闭视图后仍然会触发。 根本不会触发viewDidUnload或dealloc。 因此,游戏最终变得不稳定。 这个gameviewcontroller何时以及如何释放其中包含的所有对象? 我一直在网上搜索,但找不到合适的答案。
答案 0 :(得分:0)
添加视图控制器的视图时,不会调用视图控制器上的某些生命周期方法。其中包括以下内容:
viewWillAppear:
viewDidAppear:
viewWillDisappear:
viewDidDisappear:
viewDidUnload
。我相信如果您明确将view
属性设置为nil
。相反,您可能想要present a modal view controller。这正式将其添加到视图控制器的层次结构中,有助于管理内存,并在适当时调用上述所有方法。如果你这样做,你可以在调用presentModalViewController:animated:
后立即释放视图控制器,它将一直保留到被解雇。
如果您决定坚持使用当前的方法(虽然我不建议这样做),您应该在屏幕上gameview
消失时执行以下操作:
gameViewController.view = nil;
[gameViewController release];
gameViewController = nil;