どのスレッドからでも発生する可能性のあるコールバックがあります。このコールバックを取得したら、メイン スレッドで特定のタスクを実行したいと思います。
すでにメイン スレッドにいるかどうかを確認する必要がありますか? または、以下のコードを呼び出す前にこのチェックを実行しないと、何かペナルティが発生しますか?
dispatch_async(dispatch_get_main_queue(), ^{
// do work here
});
ベストアンサー1
いいえ、メイン スレッドにすでにいるかどうかを確認する必要はありません。ブロックをメイン キューにディスパッチすると、対応する実行ループが実行されたときに、ブロックがメイン スレッドでシリアルに実行されるようにスケジュールするだけです。
すでにメイン スレッドにいる場合、動作は同じです。ブロックはスケジュールされ、メイン スレッドの実行ループが実行されたときに実行されます。