2

すでにメイン スレッドを使用している場合、メイン スレッドでコード ブロックを遅延させてディスパッチしても安全ですか?

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);

それとももっと安全な方法がありますか?これを実行するときに既にメイン キュー (メイン スレッド) にいる場合、チェックを実行する必要がありますか?

4

2 に答える 2

5

通常、ブロックが非同期でキューに入れられている場合、すでにメイン スレッドにいるかどうかを確認する必要はありdispatch_afterません

この関数は、指定された時間まで待機してから、ブロックを指定されたキューに非同期に追加します。

ただし、 のような同期関数を使用している場合は確認する必要がありますdispatch_sync。そうしないと、デッドロックが発生します。

于 2013-06-28T11:42:37.157 に答える