【发布时间】:2013-01-01 10:44:58
【问题描述】:
我有一个显示模式的 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]);
}
我打开和关闭了几次modal,输出是这样的:
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] count]只会增加。
我希望它随着我打开和关闭模式窗口而增加和减少。我的应用程序使用 ARC。谁能给我解释一下?
提前谢谢你
【问题讨论】:
-
[window isReleasedWhenClosed]返回什么?模态显示为工作表还是顶级模态弹出窗口? -
窗口被设置为在关闭时释放。事实证明,我没有在这个项目上启用 ARC,所以控制器仍然被保留。谢谢!
-
好的,所以问题是您认为您使用的是 ARC,但不是吗?是的,这将导致各种泄漏......
-
我在 XCode 中工作不多,出于某种原因,我一直认为 ARC 这些天是默认启用的
-
是的。除非您使用的是相当旧的 Xcode 版本(在这种情况下,“这些天”不相关),当您创建一个新项目并选择 Cocoa 应用程序时,“使用自动引用计数”复选框默认情况下处于启用状态。除非你把它关掉,否则你会明白的。 (而且,与 Xcode 3 不同,我认为甚至没有任何方法可以更改您的首选项中的默认值……)
标签: objective-c macos cocoa appkit