1. ホーム
  2. オブジェクティブC

[解決済み】メインスレッドでタスクを実行するGCD

2022-04-03 17:26:41

質問

私は、どのスレッドからも来るかもしれないコールバックを持っています。このコールバックを受け取ったとき、私はメインスレッドで特定のタスクを実行したいと思います。

あるいは、以下のコードを呼び出す前に、このチェックを行わないと何かペナルティがあるのでしょうか?

dispatch_async(dispatch_get_main_queue(), ^{
   // do work here
});

解決方法は?

いいえ、すでにメインスレッドにいるかどうかを確認する必要はありません。ブロックをメインキューにディスパッチすることで、メインスレッドで連続的に実行されるようにスケジューリングしているだけで、対応する実行ループが実行されたときに実行されるのです。

すでにメインスレッドにいる場合、動作は同じです。ブロックはスケジュールされ、メインスレッドのランループが実行されたときに実行されます。