4

64 ビットの Cocoa アプリケーションで次のことを行う必要がある問題を解決している最中です。

  1. アプリケーション内から 32 ビットの Cocoa ヘルパー ツール (コマンド ライン ツール) を生成します。このヘルパーはファイル (正確には QuickTime ムービー) を開き、32 ビットのみの API (Quicktime-C API) を使用してそのファイルに関する情報にアクセスします。
  2. 32 ビット プロセスから収集されたデータは、64 ビット アプリケーションに戻す必要があります。
  3. 64 ビット アプリは、32 ビット プロセスが完了するまで待ってから続行する必要があります。

Cocoa でこれを実現する方法はたくさんありますが、私が収集したものから、これらは 2 つのアプローチを取ることができます。

オプション 1: パイプを使用した NSTask

  1. NSTask を使用して 32 ビット プロセスを生成する
  2. NSTasks stdoutput をパイプにリダイレクトし、64 ビット プロセスでそのパイプからデータを読み取ります。
  3. パイプからデータを解析します。これには、stdout からデータ (int、float、string など) への文字列の変換が含まれます。

オプション 2: NSDistributedNotificationCenter を使用した NSTask

  1. NSTask を使用して 32 ビット プロセスを生成する
  2. 32 ビット プロセスでデータの準備ができたら、NSNotification を分散通知センターに送信し、関連するすべてのデータを含むイベントに辞書を含めます。
  3. 64 ビット アプリで、同じ NSNotification にサブスクライブします。

それで、StackOverflowers に対する私の質問は、どのオプションが「より良い」ものですか?
どちらがより良い方法ですか?
どちらがより効率的ですか?

関与するコードが少なくなるように思われるため、オプション 2 に傾いています。これら 2 つのアプローチがうまくいかない場合、これを行うためのより良い方法はありますか?

4

2 に答える 2

2

NSDistributedNotificationCenter は正常に動作しますが、アプリケーションが OS による分散通知の受信を「保証」されていないことに注意してください。実際にこれを実際に見たことはありませんが、テクノロジーを選択するときに覚えておくべきことです.

あなたが言及しなかった他のオプションは、分散オブジェクトです。分散オブジェクトはまさにこの目的のために作られています。プロセス間またはネットワーク上で動作するプロキシ オブジェクトのシリアル化または設定を処理します。ドキュメンテーションが少し不足しており、バインディングのような Cocoa の一部の新しい部分をサポートしていません。使用するのは簡単ではありませんが、複雑な方法で連携する 2 つのプロセスを作業している場合は、それでも好きです。

于 2009-02-05T18:00:21.753 に答える