我是这样发现这个问题的:
我的应用程序有一个带有ABPeoplePickerView的小对话窗口。完成后,此窗口(或其控制器)将被正确释放。
当应用程序终止时,在applicationShouldTerminate:中,我迭代它的所有窗口([NSApp windows]),如果窗口有一个委托,并且它响应windowShouldClose:,我调用该方法,如果响应是NO,我停止终止。
记录每个窗口的标题显示,每次我创建对话框窗口时,都会创建两个额外的隐藏窗口,标题分别为"People Picker Debug Info“和"People Picker Preview",并且在关闭对话框时不会处理这些窗口。如果您使用makeKeyAndOrderFront命令,您可以实际看到这些窗口。后者是空白的。长时间运行该应用程序可能会创建大量这样的窗口,可能会耗尽资源。我应该担心吗?我应该为此做些什么吗?我能用一下吗?
我的直觉是在对话框的deallocate方法中按标题搜索这些窗口,并在那里关闭它们。是否存在任何ARC问题?
发布于 2014-08-27 23:19:03
窗口控制器的dealloc方法中的以下几行已经修复了这个问题,据我所知没有任何副作用。
for (NSWindow *w in [NSApp windows]) {
if ([w.title isEqualToString:@"People Picker Debug Info" ]) {
[w setReleasedWhenClosed:YES];
[w close];
}
if ([w.title isEqualToString:@"People Picker Preview" ]) {
[w setReleasedWhenClosed:YES];
[w close];
}
}https://stackoverflow.com/questions/24481040
复制相似问题