我有一个显示模式的 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
So, [[[NSApplication共享应用程序]窗口]计数]只曾经增加.
当我打开和关闭模式窗口时,我希望它会增加和减少。我的应用程序使用 ARC。谁可以给我解释一下这个?
先感谢您
您正在关闭窗口,但这并没有取消分配它,因为您的窗口控制器ModalWindowController
至今仍保留着它。我在您的示例中没有看到任何表明窗口控制器正在被释放的内容。
给您的最简单的答案是让您在调用后释放窗口控制器-runModalForWindow:
.
您可能期望窗口控制器在窗口关闭时关闭。这是你必须自己实现的事情。来自 Apple 文档中的“窗口关闭行为”:
如果你想关闭一个窗口同时使窗口和窗口
当控制器不是文档的一部分时,控制器就会消失,您的子类
NSWindowController 可以观察 NSWindowWillCloseNotification 或者,如
窗口委托,实现 windowWillClose: 方法并包含
您的实现中的以下代码行:“[self autorelease];”
在您的场景中,这可能不是最好的方法,因为您最终会在有机会调用之前处理掉窗口控制器和窗口-stopModal
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)