Так как anotherView является переменной экземпляра, вы можете освободить ее в своем методе dealloc. Но тогда у вас все еще есть утечка памяти, так как каждый раз, когда нажимается ваша кнопка, создается новый экземпляр контроллера окна, но только последний может быть освобожден. Вы действительно должны использовать аксессоры для этого. Вот мое предложение:
- (NSWindowController *) anotherView;
{
if (nil == anotherView) {
anotherView = [[NSWindowController alloc] initWithWindowNibName:@"AnotherWindow"];
}
return anotherView;
}
- (void) setAnotherView: (NSWindowController *) newAnotherView;
{
if (newAnotherView != anotherView) {
[anotherView release];
anotherView = [newAnotherView retain];
}
}
- (void) dealloc;
{
[self setAnotherView: nil];
[super dealloc];
}
- (IBAction) someButtonClick: (id) sender;
{
[[self anotherView] showWindow: self];
}
Если вы используете свойство Objective-C 2.0, вам не нужно писать сеттер.
А также вы должны переименовать вашу переменную экземпляра, имя должно отражать, что это такое. И представление не является оконным контроллером.