我正在构建一个 Cocoa 应用程序并且有一个关于使用窗口控制器的问题。这个想法是,如果用户从菜单栏中选择 New,则会创建一个 MyWindowController 的实例,它是 NSWindowController 的子类,并显示来自 MyWindow.xib 的新窗口。
我正在处理应用程序委托中的操作。根据我在搜索类似以下内容后所见,可以完成。显示窗口后,我没有任何理由再存储指向窗口控制器的指针,并且由于我分配了它,我还在显示窗口之前自动释放它。
[[[[MyWindowController alloc] init] autorelease] showWindow:self];
由于窗口很快被释放,窗口将在屏幕上短暂显示然后消失。我找到了一个解决方案,在 -showWindow: 方法中保留窗口控制器,并在收到 windowWillClose 通知后让它自行释放。
- (IBAction)showWindow:(id)sender
{
[self retain];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
object:self.window
queue:nil
usingBlock:^(NSNotification *note) {
[self release];
}];
[super showWindow:sender];
}
有一个更好的方法吗?我已经搜索了 Apple 文档,但没有找到关于使用哪些做法的任何内容。这听起来像是应该涵盖的非常基本的东西,所以也许我只是在使用错误的术语进行搜索。