2012-02-06 11 views

答えて

1

いいえ、そうすることはできません。 performSelectorのメソッドグループは、実行ループのアクションをスケジュールします。現在のコードブロックが実行ループに戻ると、これらのアクションが実行されます。 ( "現在のコードブロック"とすると、あなたのコードがメインスレッド上で実行されていることを意味します)

1

waitUntilDoneYESに設定されている場合は、絶対にperformSelectorOnMainThreadを呼び出すコードの実行を中断します。 NOに設定されている場合、セレクタはメインスレッドで実行されるようにキューに入れられます。

performSelectorOnMainThreadの呼び出し元がメインスレッドでない場合、「現在のコードブロック」が終了する前にセレクタが実行されるかどうかは、CPUの状態に完全に依存します。複数のCPUが存在する可能性があります。 2つのスレッドが同時にスケジュールされている場合や、あるOSが現在のスレッドではなくメインスレッドのスケジュールを決めている可能性があります。

基本的に、これらの呼び出しは、マルチスレッドプログラミングから慣れているのと同じように、現在のコードブロックの実行を中断することがあります。

[「現在のコードブロック」と私はあなたがの発信者を意味想定していますperformSelectorOnMainThread]

更新:

ああ、右、あなたはそれが現在実行されているコードを中断することができます」を意味しますメインスレッドで? "それに対する答えは間違いありません。メインスレッドの実行ループで、ループの次回実行時にスケジュールされます。

+0

これは間違っています。これらの呼び出しは、メインスレッド上で実行中の現在のコードブロックの実行を中断することはできません。 – mvds

+0

しかし、呼び出し元が別のスレッドで実行されている場合は... – mattjgalloway

+0

申し訳ありませんが、現在のコードブロックがメインスレッドで実行されていることを反映するために質問を編集しました。 –

関連する問題