ABPeoplePickerView正在离开隐藏的窗户? (OSX)

时间:2014-06-29 23:05:17

标签: macos cocoa abaddressbook abpeoplepickerview

这就是我发现问题的方法:

我的应用程序有一个带有ABPeoplePickerView的小对话窗口。完成后,此窗口(或其控制器)被正确释放。

当应用程序终止时,在applicationShouldTerminate:我遍历其所有窗口([NSApp windows])并且如果窗口有一个委托并且它响应windowShouldClose:我调用该方法,如果回复是NO,我停止终止。

记录每个窗口的标题显示,每次我创建对话窗口时,都会创建两个额外的隐藏窗口,其中包含标题:“人员选取器调试信息”和“人员选取器预览”,并且这些窗口不会被处理掉对话框已关闭。如果你makeKeyAndOrderFront他们,你实际上可以看到这些窗口。后者是空白的。应用程序的长期运行可能会创建大量的这些窗口,可能会耗尽资源。我应该担心吗?我该怎么办呢?我可以利用它们吗?

我的预感是在对话框的deallocate方法中按标题搜索这些窗口,并在那里关闭它们。有ARC问题吗?

1 个答案:

答案 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];
  }
}