0

これが私が問題を発見した方法です:

私のアプリには、ABPeoplePickerView を含む小さなダイアログ ウィンドウがあります。このウィンドウ (またはそのコントローラー) は、終了時に正しく割り当て解除されます。

アプリが終了すると、applicationShouldTerminate:そのすべてのウィンドウを反復処理し ( [NSApp windows])、ウィンドウにデリゲートがあり、windowShouldClose:そのメソッドに応答する場合、応答が NO の場合は終了を停止します。

各ウィンドウのタイトルをログに記録すると、ダイアログ ウィンドウを作成するたびに、「People Picker Debug Info」と「People Picker Preview」というタイトルの 2 つの追加の非表示ウィンドウが作成され、これらのウィンドウはダイアログが終了しても破棄されないことがわかりました。閉まっている。これらのウィンドウは、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 に答える