gpt4 book ai didi

objective-c - 窗口关闭时释放 NSWindowController

转载 作者:太空狗 更新时间:2023-10-30 03:52:14 25 4
gpt4 key购买 nike

我正在构建一个 Cocoa 应用程序并且有一个关于使用窗口 Controller 的问题。这个想法是,如果用户从菜单栏中选择新建,则会创建一个 MyWindowController 的实例,它是 NSWindowController 的一个子类,并显示一个来自 MyWindow.xib 的新窗口。

我正在处理应用程序委托(delegate)中的操作。根据我在搜索之后所看到的,可以完成以下内容。显示窗口后,我没有任何理由再存储指向窗口 Controller 的指针,因为我分配了它,所以我还在显示窗口之前自动释放它。

[[[[MyWindowController alloc] init] autorelease] showWindow:self];

由于窗口很快就会被释放,窗口会在屏幕上短暂显示然后消失。我找到了一个解决方案,我将窗口 Controller 保留在 -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 文档,但没有找到任何关于使用哪种做法的信息。这听起来像是应该涵盖的非常基础的内容,所以也许我只是在搜索错误的术语。

最佳答案

通常你会捕获窗口 Controller ,只有当你用完它时才释放它。我会说您的应用程序代表将对此负责。如果可以有多个,只需将它们存储在一个数组中。虽然您的解决方案可能有效,但它不是很优雅。

如果您正在开发基于文档的 Cocoa 应用程序,您可以在文档子类方法 makeWindowControllers 中创建窗口 Controller ,并让该类持有指向窗口 Controller 的指针。

关于objective-c - 窗口关闭时释放 NSWindowController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com