0

メインの 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];
    }
4

2 に答える 2

1

後で PGGameViewController が必要になる可能性があるため、なぜこれを行う必要があるのか​​ わかりません。しかし、本当にリリースしたい場合は、次のようにすることができます。

PMGameViewController *tmpViewController = [[[UIApplication sharedApplication] delegate] viewController(or however it's called)]

それを逆参照してから、自分のことをして、必要のないときに解放します。

[tmpViewController release]

参照をしばらく保持する必要がある場合は、2 つのゲームのビュー コントローラーで id ivar を作成し、割り当てプロトコルを使用できますが、コントローラーを解放した後にそれを nil に設定することを忘れないでください。

id tmpViewController;
...
@property (nonatomic, assign) id tmpViewController;
...
@synthesize tmpViewController;
于 2010-01-31T02:19:48.480 に答える
0

ビューコントローラを削除した後、nilに設定できます。nilに設定する前に、オプションでリリースできます。リリースするかどうかは、用途とロードにかかる費用によって異なります。

于 2009-09-22T04:06:41.190 に答える