我的主要UIViewController(PMGameViewController.h)是我的应用委托调用的文件。
我的主UIViewController(PMGameViewController.m)上有几个按钮。按下按钮时,我执行insertSuvbiew并在顶部附加另一个UIViewController。当迷你游戏结束时,我只需要执行removeFromSubview。这将删除我插在顶部的UIViewController并显示主菜单。完美这是我想要的,但是......
执行removeFromSubview后,objectalloc不会丢弃。我该如何释放UIViewController的内存。我不知道如何反向引用我的主UIViewController(PMGameViewController.m)告诉它它已被删除并释放UIViewController内存。
以下是我插入子视图的方法
//////////////////////////////////////
//Buttons are in PMGameViewController.m file
//////////////////////////////////////
if((UIButton *) sender == gameClassicBtn) {
//////////////////////////////////////
//This Inserts the GameClassic.h file
//////////////////////////////////////
GameClassic *gameClassicController = [[GameClassic alloc]
initWithNibName:@"GameClassic" bundle:nil];
self.gameClassic = gameClassicController;
[gameClassicController release];
[self.view insertSubview:gameClassicController.view atIndex:1];
}
if((UIButton *) sender == gameArcadeBtn) {
//////////////////////////////////////
//This Inserts the GameArcade.h file
//////////////////////////////////////
GameArcade *gameArcadeController = [[GameArcade alloc]
initWithNibName:@"GameArcade" bundle:nil];
self.gameArcade = gameArcadeController;
[gameArcadeController release];
[self.view insertSubview:gameArcadeController.view atIndex:1];
}
答案 0 :(得分:1)
我不知道你为什么要这样做,因为之后你可能需要你的PGGameViewController。但如果你真的想发布它,你可以这样做:
PMGameViewController *tmpViewController = [[[UIApplication sharedApplication] delegate] viewController(or however it's called)]
反向引用它,然后做你的东西并在你不需要时释放它:
[tmpViewController release]
如果您需要保留一段时间的参考,您可以在两个游戏视图控制器中创建一个id ivar,并使用asign协议,但不要忘记在释放控制器后将其设置为nil:
id tmpViewController;
...
@property (nonatomic, assign) id tmpViewController;
...
@synthesize tmpViewController;
答案 1 :(得分:0)
删除后,您可以将视图控制器设置为nil。在将其设置为nil之前,您可以选择释放它。是否释放它取决于使用情况以及加载的费用。