[解決済み] DispatchQueue.main.asyncとDispatchQueue.main.syncの相違点
2022-05-10 03:49:37
質問
私はこれまで
DispatchQueue.main.async
は、UI関連の操作を実行するために長い間使用されてきました。
Swiftでは
DispatchQueue.main.async
と
DispatchQueue.main.sync
であり、どちらも主キューで実行される。
この2つの違いについて教えてください。 どのような場合にそれぞれを使うべきでしょうか?
DispatchQueue.main.async {
self.imageView.image = imageView
self.lbltitle.text = ""
}
DispatchQueue.main.sync {
self.imageView.image = imageView
self.lbltitle.text = ""
}
解決方法は?
を使用する場合
async
は、ディスパッチされたブロックが実行されるまで待たずに、呼び出し側のキューを先に進ませることができます。逆に
sync
は、呼び出し側のキューを停止させ、ブロック内でディスパッチした作業が終了するまで待機させます。したがって
sync
はデッドロックにつながる可能性があります。試しに
DispatchQueue.main.sync
をメインキューから呼び出すと、呼び出し側のキューはディスパッチされたブロックが終了するまで待ちますが、(キューが停止して待っているため)起動すらできないので、アプリはフリーズします。
を使用する場合
sync
? 別のキューで行われる作業を待ち、その後に現在のキューで作業を継続する必要がある場合。
syncの使用例です。
シリアルキューでは
sync
をミューテックスとして使用することで、1つのスレッドだけが同時に保護されたコードを実行できるようにします。
関連
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] 並行処理と並列処理の違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み] Swiftの配列を文字列に変換するには?
-
[解決済み] swiftにおける "precondition "と "assert "の違いとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 非同期実行と同期実行、その主な違いは?[クローズド]
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] UIViewに角丸をつける
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする
-
[解決済み] ぼかしの入ったオーバーレイビューの作成