0

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

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

当应用程序终止时,我会applicationShouldTerminate:遍历它的所有窗口[NSApp windows]windowShouldClose:

记录每个窗口的标题显示,每次我创建我的对话窗口时,都会创建两个额外的隐藏窗口,标题为:“人员选择器调试信息”和“人员选择器预览”,并且当对话框出现时这些窗口不会被丢弃关闭。如果你 makeKeyAndOrderFront 他们实际上可以看到这些窗口。后者是空白的。该应用程序的长期运行可能会创建大量此类窗口,可能会耗尽资源。我应该担心吗?我应该对此做些什么吗?我可以利用它们吗?

我的直觉是在我的对话框的方法中按标题搜索这些窗口deallocate,然后在那里关闭它们。有任何ARC问题吗?

4

1 回答 1

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];
  }
}
于 2014-08-27T15:19:03.360 回答