Frage

Hier kann sagen, dass ich ein Fenster, in etwa so:

  

[[TBAddTaskWindowController neu] Showwindow: self];

Wo ist das TBAddTaskWindowController Objekt gemeint freigegeben werden? Ist die allgemeine Lösung [self release] in windowWillClose anrufen?

Es fühlt sich nicht richtig anderes Objekt „eigenes“ um das Fenster zu haben, weil es bedeutet, ist zu existieren, bis der Benutzer es schließt.

War es hilfreich?

Lösung

Der gleiche Code, der die Fenstersteuerung durch Senden der new Nachricht an die Klasse instanziiert, genauso wie wenn sie es durch alloc und init Nachrichten getan hatte.

Andere Tipps

Ja, ein gemeinsamer Weg, um die Fenstersteuerung freigeben zu tun ist, mit:

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

Der Window-Controller braucht nur zu leben, solange das Fenster um, so dass es autoreleasing, wenn das Fenster weggeht macht absolut Sinn.

Denken Sie daran, alle anderen Beobachter zu entfernen, etc auch.


[Hinzugefügt Informationen für das Arbeiten unter ARC]

Für ARC, benötigen Sie einen starken Hinweis auf die Fenstersteuerung zu halten, während das Fenster geöffnet ist, und es dann zu entfernen, wenn das Fenster geschlossen.
Dazu habe ich eine Kategorie auf dem Fenster mit zwei Verfahren gesteuert:

  • pnl_addWindowController - genannt durch die Fenstersteuerung, wenn das Fenster zum ersten Mal geöffnet
  • pnl_removeWindowController - genannt von windowWillClose

Die Kategorie unterhält ein globales NSMutableSet des aktiven Fensters Controller. Der Code ist im Wesentlichen nur [gWindowControllers addObject:self] und [gWindowControllers removeAllObjects], mit etwas faul Schaffung des NSMutableSet und einigen Sperren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top