8

NSApplicationMainのドキュメントには、次のように記載されています。

アプリケーションを作成し、アプリケーションのメインバンドルからメインnibファイルをロードして、アプリケーションを実行します。この関数は、アプリケーションのメインスレッドから呼び出す必要があります[...]。

「メインスレッド」は明らかに、プログラムの最初のスレッドを指し、そこでmain(argc, argv)開始します。NSThreadのドキュメントをざっと見る+ (BOOL)isMainThreadと、現在のスレッドが「メイン」スレッドであるかどうかを判断するために使用できることがわかります。いくつかのテストを実行しました。このメソッドNSApplicationMainは、まだ呼び出されているかどうかに関係なく機能します。

私の質問には2つの(ある程度関連する)部分があります:

  1. のメインスレッドの何がそんなに特別なのNSApplicationMainですか?
  2. そもそもCocoaはメインスレッドをどのように識別しますか?
4

1 に答える 1

7

ここは、関数の再実装に従って NSApplicationMain を学習するのに適した場所です。NSApplicationMain は、主にメイン スレッドから呼び出す必要があります。

  1. プライマリ インターフェイスを処理します
  2. UI 要素 (OS X だけでなく、いくつかのシステムでは) を正しく機能させるには、すべて同じスレッド内で呼び出す必要があります。
  3. Cocoa フレームワーク内で提供されるグラフィック要素は、メイン スレッドで実行されることを前提としています。

ほとんどの場合、Cocoa はメイン スレッドで呼び出しを行い、UI はすべて同じスレッドで実行する必要があるため、NSApplicationMain を含む UI に触れるものはメイン スレッド内で作業する必要があります。

于 2011-09-15T21:02:05.097 に答える