2012-01-20 8 views
8

WaitUntilDOneの意味はperformSelectorOnMainThreadにありますか?performSelectorOnMainThreadでWaitUntilDOneの意義は何ですか?

どのようにYESまたはNOに設定してWaitUntilDoneにすることができますか?

UPDATE:

私の質問されている必要があります:どのようなシナリオでは、彼らは違いを作るのですか?

セルジオの答えは私が期待していたものでした。

答えて

12

performSelectorOnMainThread:withObject:waitUntilDone:リターンを持つように、現在のスレッドブロック/待機を意味:指定された後まで、現在のスレッドブロックかどうかを指定

ブールセレクタはメインスレッド上の受信側で実行されます。このスレッドをブロックするには、YESを指定します。それ以外の場合は、このメソッドをすぐに戻すにはNOを指定します。 現在のスレッドがメインスレッドでもあり、このパラメータにYESを指定すると、メッセージはすぐに配信されて処理されます。

実行するスレッドに焦点を当てる必要があります。performSelectorOnMainThread。そのスレッドはブロックし、メインスレッドがそのセレクタを完了するまで待機します。例えば、ワーカースレッドがメインスレッドにメッセージを送信する必要がある(例えば、スレッドセーフではないいくつかの中央ストアに情報を格納する)必要があるとする。作業者は、同じ種類の別の操作を発行する前に操作をブロックして待機する必要があります。だから、waitUntilDoneがこのような場合に便利です。

+0

ありがとうございます.. – Krishnan

9

あなたがNOを言うなら、performSelectorOnMainThreadはブロックされませんし、あなたのセレクタを実行するためにメインスレッドを待たずに、すぐにperformSelectorOnMainThread後にコードの次の行を実行します。

YESと言うと、performSelectorOnMainThreadという名前のスレッドは、メインスレッドがセレクタを実行するまでその行で実行をブロックし、次に続行します。

0

通常、現在のスレッドの実行をブロックすることを避けたい場合は、YESを使用します。

NOの場合、実行ループが再開されたときに実行されるメインスレッドの実行ループの実行リストにメッセージが追加されます。これはすぐに、実質的に同時に/同時に実行できます。

関連する問題