2

Mac OS Xでは、Cocoaはイベント駆動型です。これは、それぞれがUIによって駆動されることを意味します。ユーザーが何かをクリックしたり、特定の領域を移動したりすると、イベントハンドラーが呼び出されます。MainはNSApplicationMain()を呼び出すだけで、プログラムが終了するまで無限ループを作成します。

ただし、ユーザー主導ではないタスクについてはどうでしょうか。プログラムの基本機能を提供するために、バックグラウンドで動作する必要のあるタスクをどこに配置しますか?たとえば、フォトブースは、ユーザーがUIを操作するときに特定のことを行います(つまり、ユーザーが特定のボタンをクリックするとビデオカメラに変わります)。ただし、フォトブースは、ビデオストリームを提供するために、カメラからフレームを継続的に取得しています。

だから私の質問は、UI以外のタスクのコードはどこに行くのですか?Main()は、プログラムが開始されたばかりのときではなく、プログラムの存続期間全体にわたって実行するタスクが必要なため、実際には可能ではありません。

私はMacOSX Snow Leopard(つまり、すべてのMacシステムで動作するものが必要です:Lion OS X)を使用しており、XcodeでObj-CCocoaアプリケーションを使用しています。

4

1 に答える 1

8

すべてのアプリケーション cocoa ベースのアプリケーションは、RunLoopsを使用してアクセスできます。

アプリが実行したい作業はすべて、RunLoop を使用して実行します。通常、これは他のスレッドで行われますが、作業が軽量で UI スレッドがブロックされない場合は、メイン スレッドの RunLoop でコードを実行できます。

詳細については、Apple のThread Programming Guideを読むことをお勧めします。

Grand Central Dispatchでは、今日のマルチコア システムを利用するようにプログラミング モデルが変更されたため、タスクを定義し、OS にその実行を管理させることができます。

于 2012-01-11T23:15:54.767 に答える