Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos ABPeoplePickerView正在留下隐藏的窗口?(OSX)_Macos_Cocoa_Abaddressbook_Abpeoplepickerview - Fatal编程技术网

Macos ABPeoplePickerView正在留下隐藏的窗口?(OSX)

Macos ABPeoplePickerView正在留下隐藏的窗口?(OSX),macos,cocoa,abaddressbook,abpeoplepickerview,Macos,Cocoa,Abaddressbook,Abpeoplepickerview,这就是我发现问题的原因: 我的应用程序有一个带有ABPeoplePickerView的小对话框窗口。完成时,此窗口(或其控制器)已正确解除分配 当应用程序终止时,在应用程序shouldTerminate:中,我遍历它的所有窗口([NSApp windows]),如果窗口有委托,并且它响应窗口shouldClose:我调用该方法,如果响应为否,我停止终止 记录每个窗口的标题显示,每次我创建对话框窗口时,都会创建两个额外的隐藏窗口,标题为“人员选取器调试信息”和“人员选取器预览”,对话框关闭时这些窗

这就是我发现问题的原因:

我的应用程序有一个带有ABPeoplePickerView的小对话框窗口。完成时,此窗口(或其控制器)已正确解除分配

当应用程序终止时,在
应用程序shouldTerminate:
中,我遍历它的所有窗口(
[NSApp windows]
),如果窗口有委托,并且它响应
窗口shouldClose:
我调用该方法,如果响应为否,我停止终止

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


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

窗口控制器的解除锁定方法中的以下几行已修复该问题,据我所知,没有副作用

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