4


3

私は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の標準出力をパイプにリダイレクトし、64ビットプロセスでそのパイプからデータを読み取ります。

  3. パイプからのデータを解析します。これには、標準出力からの文字列をデータに変換する必要があります(整数、浮動小数点数、文字列など)。

オプション2:NSDistributedNotificationCenterによるNSTask

  1. NSTaskを使用して32ビットプロセスを起動する

  2. データが32ビットプロセスで準備できたら、NSNotificationをDistributed通知センターに送信し、必要に応じてすべての関連データとともに辞書を含めます。

  3. 64ビットアプリで、同じNSNotificationを購読する

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

私は選択肢2に傾いています。なぜなら、関与するコードが少なくなるようだからです。 この2つの方法がうまくいかない場合は、これを行うより良い方法はありますか?

2 Answer


3


あなたは、サブプロセスがアプリケーションになると言います。 そのためにNSTaskを使用しないでください - Launch Servicesを混乱させます。 (好奇心のあるエキスパートユーザーがコマンドラインからそれを実行できるようにそれがヘルパーツールであることを意味するなら、NSTaskはOKです。)

DNCはどちらの方法でも動作しますが、サブプロセスが本当にアプリケーションの場合は、NSTask NSPipeを使用しないでください - 分散オブジェクトを使用してください。


2


NSDistributedNotificationCenterは問題なく動作しますが、アプリケーションがOSから分散通知を受け取ることが「保証」されているわけではないことに注意してください。 実際にはこれを実際に見たことはありませんが、テクノロジを選択する際には注意が必要です。

あなたが言及しなかった他のオプションは分散オブジェクトです。 分散オブジェクトはまさにこの目的のために作られています。 プロセス間またはネットワーク上で動作するプロキシオブジェクトのシリアル化または設定を処理します。 ドキュメンテーションは少し欠けています、それはバインディングのようなCocoaのいくつかの新しい部分をサポートしません、それは使用するのが正確であるというわけではありません、