Estoy construyendo una aplicación Cocoa y tengo una pregunta sobre el uso de controladores de ventana. La idea es que si el usuario selecciona Nuevo desde la barra de menú, se crea una instancia de MyWindowController que es una subclase de NSWindowController y se visualiza una nueva ventana de MyWindow.xib.Liberar un NSWindowController cuando la ventana está cerrada
Estoy manejando la acción en el delegado de la aplicación. Por lo que he visto después de buscar algo como lo siguiente, podría hacerse. Una vez que se muestra la ventana, ya no tengo ningún motivo para guardar un puntero en el controlador de la ventana y, como lo asigné, también lo desbloqueo automáticamente antes de mostrar la ventana.
[[[[MyWindowController alloc] init] autorelease] showWindow:self];
Como la ventana se abre poco después, la ventana se mostrará brevemente en la pantalla y luego desaparecerá. Encontré una solución en la que retengo el controlador de ventana en el método -showWindow: y dejo que se libere una vez que recibe una notificación de ventanaWillClose.
- (IBAction)showWindow:(id)sender
{
[self retain];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
object:self.window
queue:nil
usingBlock:^(NSNotification *note) {
[self release];
}];
[super showWindow:sender];
}
¿Hay una mejor manera de hacerlo? He buscado en la documentación de Apple y no he encontrado nada sobre qué prácticas usar. Suena como algo muy básico que debería cubrir, así que tal vez solo estoy buscando con los términos incorrectos.