Pregunta

Digamos que visualizo una ventana así:

  

[[TBAddTaskWindowController new] showWindow: self];

¿Dónde se debe lanzar el objeto TBAddTaskWindowController? ¿Es la solución genérica para llamar a [self release] en windowWillClose?

No parece correcto tener ningún otro objeto "propio" la ventana, porque debe existir hasta que el usuario la cierre.

¿Fue útil?

Solución

El mismo código que instancia el controlador de ventana enviando el mensaje new a la clase, exactamente como si lo hubiera hecho con alloc y init mensajes.

Otros consejos

Sí, una forma común de liberar el controlador de ventana es con:

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

El Controlador de ventana necesita vivir solo mientras la ventana esté alrededor, por lo que el autorrelegado cuando la ventana desaparece tiene mucho sentido.

Recuerde eliminar cualquier otro observador, etc. también.


[información adicional para trabajar bajo ARC]

Para ARC, debe conservar una fuerte referencia al control de la ventana mientras la ventana está abierta, y luego eliminarla cuando la ventana se cierre.
Para hacer esto, agregué una categoría en la ventana controlada con dos métodos:

  • pnl_addWindowController & # 8212; llamado por el controlador de la ventana cuando la ventana se abre por primera vez
  • pnl_removeWindowController & # 8212; llamado desde windowWillClose

La categoría mantiene un NSMutableSet global de controladores de ventana activos. El código es esencialmente [gWindowControllers addObject: self] y [gWindowControllers removeAllObjects] , con una creación diferida del NSMutableSet y algunos bloqueos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top