Pergunta

Vamos dizer que eu exibir uma janela assim:

[[TBAddTaskWindowController novo] SHOWWINDOW: self];

Onde está o objeto TBAddTaskWindowController feito para ser lançado? É a solução genérica para chamada [liberação auto] em windowWillClose?

Ele não se sente bem para ter qualquer outro objeto "próprio" a janela, porque está destinado a existir até que o usuário fecha-lo.

Foi útil?

Solução

O mesmo código que instanciado o controlador de janela, enviando a mensagem new para a classe, da mesma forma como se tivesse feito isso por mensagens alloc e init.

Outras dicas

Sim, uma maneira comum de fazer soltar o controlador de janela é com:

- (void)windowWillClose:(NSNotification *)notification
{
    [self autorelease];
}

O Controlador Janela precisa para viver somente enquanto a janela estiver ao redor, assim autoreleasing-lo quando a janela vai embora faz todo o sentido.

Lembre-se de remover quaisquer outros observadores, etc também.


[Informação adicionada para trabalhar sob ARC]

Para ARC, você precisa manter uma forte referência para o controle janela enquanto a janela está aberta, e depois removê-lo quando os fecha a janela.
Para fazer isso, eu adicionei uma categoria na janela controlada com dois métodos:

  • pnl_addWindowController - chamado pelo controlador de janela quando a janela é aberta pela primeira vez
  • pnl_removeWindowController - chamado de windowWillClose

A categoria mantém uma NSMutableSet mundial de controladores de janela ativa. O código é essencialmente apenas [gWindowControllers addObject:self] e [gWindowControllers removeAllObjects], com alguma criação preguiçoso do NSMutableSet e alguns de bloqueio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top