iPhone - выпуск нескольких контроллеров UIViewControllers

Мой основной UIViewController (PMGameViewController.h) - это файл, вызовы которого мои приложения делегируют.

На моем основном UIViewController (PMGameViewController.m) есть несколько кнопок. Когда кнопка нажата, я делаю insertSuvbiew и прикрепляю сверху еще один UIViewController. Когда мини-игра закончена, я просто выполняю removeFromSubview. Это удаляет UIViewController, который я вставил сверху, и показывает мне главное меню. Идеально, это то, что я хочу, но ...

После того, как я выполняю removeFromSubview, объектный блок не сбрасывается. Как я могу освободить память UIViewController. Я не знаю, как сделать обратную ссылку на мой основной UIViewController (PMGameViewController.m), чтобы сообщить ему, что он был удален, и освободить память UIViewController.

Вот как я вставляю Subview

//////////////////////////////////////
//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];
    }

person bbullis21    schedule 22.09.2009    source источник
comment
Вам не нравятся наши ответы? Нет комментариев ?   -  person Julien    schedule 01.02.2010


Ответы (2)


Я не знаю, почему вы хотите это сделать, поскольку впоследствии вам может понадобиться ваш 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;
person Julien    schedule 31.01.2010

Вы можете установить для контроллера представления значение nil после его удаления. Перед тем, как установить для него значение nil, вы можете при желании отпустить его. Отпустите вы его или нет, это зависит от использования и от того, насколько дорого стоит загрузка.

person Jordan    schedule 22.09.2009