这就是我发现问题的方法:
我的应用程序有一个带有ABPeoplePickerView的小对话窗口。完成后,此窗口(或其控制器)被正确释放。
当应用程序终止时,在applicationShouldTerminate:
我遍历其所有窗口([NSApp windows]
)并且如果窗口有一个委托并且它响应windowShouldClose:
我调用该方法,如果回复是NO,我停止终止。
记录每个窗口的标题显示,每次我创建对话窗口时,都会创建两个额外的隐藏窗口,其中包含标题:“人员选取器调试信息”和“人员选取器预览”,并且这些窗口不会被处理掉对话框已关闭。如果你makeKeyAndOrderFront他们,你实际上可以看到这些窗口。后者是空白的。应用程序的长期运行可能会创建大量的这些窗口,可能会耗尽资源。我应该担心吗?我该怎么办呢?我可以利用它们吗?
我的预感是在对话框的deallocate
方法中按标题搜索这些窗口,并在那里关闭它们。有ARC问题吗?
答案 0 :(得分:0)
窗口控制器的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];
}
}