2

カスタム クラスのネストされたオブジェクトのグループを維持するアプリケーションがあります。このアプリケーションは、非常によく似たカスタム プロバイダー パッチを持つ複数の Quartz Composer コンポジションで、データの変更に応じてデータを共有できる必要があります。QC 組成は、このアプリケーション内で実行されます。

QC パッチは、入力で限られたオブジェクト タイプしか処理できないため、カスタム クラスがそこで機能するようには見えません。また、新しいコンポジションを追加するたびに新しい Objective-C コードを追加する必要があるような方法で、コンポジションをアプリケーションにハードワイヤすることにも躊躇しています。

警告を受けていたにもかかわらず、分散オブジェクトを試しました。私はそれらがあまりにも信頼できないことに気づきました。私の QC パッチは 60 fps で実行されているため、提供されたオブジェクトに頻繁にアクセスしようとするため、クラッシュする前に接続を正常にシャットダウンできません。

現在、私は分散通知を使用して、何かが変更されるたびに更新の辞書を QC パッチに送信しています。これを実行できるように、カスタム クラスを辞書にシリアル化してから、このデータを受け取るパッチの最大 5 つのインスタンスのそれぞれで辞書のシリアル化を解除します。これは機能しますが、効率が悪いようです。また、メッセージの遅延や欠落の可能性に関する警告が気になります。私のパッチは、非常にタイムリーに (0.1 秒未満で、速いほど良い) 更新をドロップせずに受信する必要があります。

アプリケーションからカスタム QC パッチにデータを取得するために使用する最適なメカニズムは何ですか?

ありがとうございました!アダム

4

1 に答える 1

0

高レベルにしたい場合は、XPC が最適です (また、Mountain Lion で直接 Objective-C と一緒に使用できるように改良されています (NSXPC接頭辞付きのクラスとプロトコルを参照してください))。これが遅すぎることが判明した場合 (XPC は非常に軽量であるため、そうすべきではありません)、Mach メッセージにフォールバックすることを試みることができます。これは、ほぼすべての種類の IPC が OS X で使用するものです。しかし! MIG による mach メッセージの生成は面倒なので、まず XPC を試して、遅すぎることが判明した場合にのみ、mach メッセージを試してください。

XPC サービスの作成方法の概要については、こちらを参照してください。

于 2012-08-04T01:12:17.737 に答える