メインスレッドでタスクを実行するためのGCD 質問する

メインスレッドでタスクを実行するためのGCD 質問する

どのスレッドからでも発生する可能性のあるコールバックがあります。このコールバックを取得したら、メイン スレッドで特定のタスクを実行したいと思います。

すでにメイン スレッドにいるかどうかを確認する必要がありますか? または、以下のコードを呼び出す前にこのチェックを実行しないと、何かペナルティが発生しますか?

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

ベストアンサー1

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

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

おすすめ記事