Выпуск NSWindowController, когда окно закрыто - PullRequest
5 голосов
/ 14 июня 2011

Я создаю приложение Cocoa и у меня есть вопрос об использовании оконных контроллеров.Идея состоит в том, что если пользователь выбирает New из строки меню, создается экземпляр MyWindowController, который является подклассом NSWindowController, и отображается новое окно из MyWindow.xib.

Я обрабатываю действие вделегат приложения.Из того, что я увидел после поиска вокруг, можно сделать что-то вроде следующего.Как только окно отображается, у меня больше нет причин хранить указатель на оконный контроллер, и, поскольку я выделил его, я также автоматически освобождаю его перед отображением окна.

[[[[MyWindowController alloc] init] autorelease] showWindow:self];

Так как окно скоро будет выпущенопосле этого окно ненадолго отобразится на экране и затем исчезнет.Я нашел решение, где я сохраняю оконный контроллер в методе -showWindow: и позволяю ему выпустить себя после получения уведомления windowWillClose.

- (IBAction)showWindow:(id)sender
{
    [self retain];
    [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
                                                      object:self.window
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
                                                      [self release];
                                                  }];
    [super showWindow:sender];
}

Есть ли лучший способ сделать это?Я искал документацию Apple и не нашел ничего, что можно использовать.Это звучит как нечто очень простое, что должно охватывать, так что, возможно, я просто ищу неправильные термины.

1 Ответ

5 голосов
/ 14 июня 2011

Обычно вы держитесь за оконный контроллер и отпускаете его только тогда, когда закончите с ним. Я бы сказал, что за это будет отвечать ваш делегат. Просто сохраните их в массиве, если их может быть несколько. Хотя ваше решение может работать, оно не очень элегантно.

Если вы работаете с приложением Cocoa на основе документа, вы создаете контроллер окна в методе подкласса документа makeWindowControllers и позволяете этому классу содержать указатель на контроллер окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...