gpt4 book ai didi

objective-c - NSApplication windows 属性 - windows 未删除?

转载 作者:行者123 更新时间:2023-12-03 16:27:10 27 4
gpt4 key购买 nike

我有一个显示模式的 NSWindow/Controller。它有一个“关闭”按钮,连接到如下操作:

- (IBAction)close:(id)sender
{
[self.window orderOut:sender];
[self.window close];

[[NSApplication sharedApplication] stopModal];
}

从我的主窗口中,我显示模式:

- (IBAction)modal:(id)sender
{
NSLog(@"Before: %lu", [[[NSApplication sharedApplication] windows] count]);

ModalWindowController *modal = [[ModalWindowController alloc] initWithWindowNibName:@"ModalWindowController"];
[[NSApplication sharedApplication] runModalForWindow:modal.window];

NSLog(@"After: %lu", [[[NSApplication sharedApplication] windows] count]);
}

我打开和关闭模态几次,输出如下:

2013-01-17 14:36:08.071 Modals[3666:303] Before: 1
2013-01-17 14:36:08.962 Modals[3666:303] After: 2
2013-01-17 14:36:09.578 Modals[3666:303] Before: 2
2013-01-17 14:36:11.009 Modals[3666:303] After: 3
2013-01-17 14:36:12.108 Modals[3666:303] Before: 3
2013-01-17 14:36:12.910 Modals[3666:303] After: 4

因此,[[[NSApplication sharedApplication] windows] 计数]只会增加

当我打开和关闭模式窗口时,我希望它会增加和减少。我的应用程序使用 ARC。有人可以向我解释一下吗?

提前谢谢

最佳答案

您正在关闭窗口,但这并没有取消分配它,因为您的窗口 Controller ModalWindowController 仍然保留它。我在您的示例中没有看到任何表明窗口 Controller 正在被释放的内容。

给您的最简单的答案是让您在调用 -runModalForWindow: 之后释放窗口 Controller 。

您可能期望窗口 Controller 在窗口关闭时关闭。这是你必须自己实现的事情。来自 Apple 文档中的“窗口关闭行为”:

If you want the closing of a window to make both window and window controller go away when it isn’t part of a document, your subclass of NSWindowController can observe NSWindowWillCloseNotification or, as the window delegate, implement the windowWillClose: method and include the following line of code in your implementation: "[self autorelease];"

在您的场景中,这可能不是最好的方法,因为您最终会在有机会调用 -stopModal 之前处理掉窗口 Controller 和窗口。

关于objective-c - NSApplication windows 属性 - windows 未删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386802/

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