Domanda

Diciamo che visualizzo una finestra in questo modo:

  

[[TBAddTaskWindowController new] showWindow: self];

Dove si intende rilasciare l'oggetto TBAddTaskWindowController? La soluzione generica è chiamare [self release] in windowWillClose?

Non è giusto avere nessun altro oggetto "proprio" la finestra, perché è pensata per esistere fino a quando l'utente non la chiude.

È stato utile?

Soluzione

Lo stesso codice che ha istanziato il controller della finestra inviando il messaggio new alla classe, proprio come se lo avesse fatto con alloc e init messaggi.

Altri suggerimenti

Sì, un modo comune per rilasciare il controller della finestra è con:

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

Il controller della finestra deve vivere solo finché la finestra è in giro, quindi rilasciarla automaticamente quando la finestra va via ha perfettamente senso.

Ricorda di rimuovere anche qualsiasi altro osservatore, ecc.


[informazioni aggiunte per lavorare sotto ARC]

Per ARC, è necessario conservare un riferimento forte al controllo della finestra mentre la finestra è aperta, quindi rimuoverlo alla chiusura della finestra.
Per fare ciò, ho aggiunto una categoria nella finestra controllata con due metodi:

  • pnl_addWindowController - chiamato dal controller della finestra alla prima apertura della finestra
  • pnl_removeWindowController - chiamato da windowWillClose

La categoria mantiene un NSMutableSet globale di controller di finestra attivi. Il codice è essenzialmente solo [gWindowControllers addObject: self] e [gWindowControllers removeAllObjects] , con qualche creazione pigra di NSMutableSet e alcuni blocchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top