Освободите NSWindowController, когда окно закрыто

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

5
задан Brian Norh 14 June 2011 в 15:39
поделиться