iPhone - релиз нескольких UIViewControllers - PullRequest
0 голосов
/ 22 сентября 2009

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

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

После того, как я делаю removeFromSubview, objectalloc не удаляется. Как я могу освободить память этого 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];
    }

Ответы [ 2 ]

1 голос
/ 31 января 2010

Я не знаю, почему вы хотите это сделать, поскольку впоследствии вам может понадобиться ваш 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;
0 голосов
/ 22 сентября 2009

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

...