Comme anotherView est une variable d'instance, vous pouvez la libérer dans votre méthode dealloc. Mais alors vous avez toujours une fuite de mémoire, puisque chaque fois que vous cliquez sur votre bouton, une nouvelle instance du contrôleur de fenêtre est créée, mais seule la dernière peut être libérée. Vous devriez vraiment utiliser des accesseurs pour cela. Voici ma suggestion:
- (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];
}
Si vous utilisez une propriété Objective-C 2.0, vous ne devez pas écrire le compositeur.
Et vous devez également renommer votre variable d'instance, le nom doit refléter ce que c'est. Et une vue n'est pas un contrôleur de fenêtre.
Mieux encore, ne créez que le contrôleur de fenêtre lorsqu'il n'a pas été créé auparavant. Si c'est le cas, envoyez simplement celui que vous avez déjà le message 'showWindow:'. –
C'est exactement ce que fait mon code. Le getter '-anotherView' crée le contrôleur de fenêtre s'il n'y en a pas encore. S'il y en a déjà un, il est simplement renvoyé. Donc '-someButtonClick:' obtient toujours le même objet. – Sven