NSWindowのupdateメソッドについてのメモ

  • NSWindowのupdateメソッドは、NSWindowDidUpdateNotificationnを通知センターにポストする以外の処理は行わない。
  • NSApplicationのupdateWindowsメソッドを呼び出す事で、アプリケーション内の全てのNSWindowに対してupdateメソッドを呼び出す事が出来る。
  • イベントループが一回転するたびに、NSWindowのupdateメソッドは呼ばれる。
  • updateメソッドが呼ばれるタイミングはNSWindowが再描画される前。
  • NSWindowのサブクラスでは、updateメソッドをオーバーライドして、モデルデータの内容を各種UIに反映する事が出来る。

これらの事を考えると、各種コントロールをアップデートするには、

  • NSWindowのupdateメソッドをオーバーライドする。
  • windowに乗っている全てのview(control)に対して、NSUserInterfaceValidationsプロトコルに基づく更新作業を行う。

と言うのがCocoa的に正しいUI更新の方法かもしれない。

MenuやToolbarはデフォルトでこのような更新メカニズムが実装されている。 NSControlにそのような仕組みが無いのは、歴史的理由とCPUパワーの問題と思われる。

現状ではCPUパワーは有り余っている。よってイベントループ毎にcontrolを更新しても問題ないと、私は判断し実装する事にする。

参考文献

OpenStepリファレンス