#概要
同期・非同期とかメインスレッド・サブスレッドとかを使い分けないと、
もさっとした動作になったり、表示したいものが意図したタイミングで表示されなかったり、
そもそも表示されないとかとか色々問題が起こりますよね。
でもって、Swift3ではどうやるんだ?というので、自分はつまずいたので、
こんな使い方をしているよっていうのを、まとめてみました。
※だいたい合ってると思いますが、100%正しいかは・・・
- DispatchQueueの使い方
- DispatchSemaphoreの使い方
- よくありそうな使い方サンプル
- 非同期でAPIリクエスト
- 同期でAPIリクエスト
#DispatchQueueの使い方
- 種類について(一部)
- 直列、メインスレッド
let queue = DispatchQueue.main
- 直列、サブスレッド
let queue = DispatchQueue(label: "jp.sample.queue")
- 並列、サブスレッド
let queue = DispatchQueue.global(qos: .default)
let queue = DispatchQueue(label: "jp.sample.queue", attributes: .concurrent)
- 直列、メインスレッド
こんな感じで、ループ内の1処理が終わるのを待たずに、次の処理が開始されます。
また、メインスレッドではないので、全ての処理が終わらずともアラートが表示されます。
6
Start: 3
Start: 5
Start: 4
Start: 9
Start: 1
Start: 8
Start: 2
Start: 7
Start: 0
End: 5
End: 4
End: 6
End: 3
End: 9
End: 1
End: 2
End: 8
End: 7
End: 0
こんな感じで、順番通りに処理が進んでいき、ループを抜けるまでアラートも表示されません。
Start: 0
End: 0
Start: 1
End: 1
Start: 2
End: 2
Start: 3
End: 3
Start: 4
End: 4
Start: 5
End: 5
Start: 6
End: 6
Start: 7
End: 7
Start: 8
End: 8
Start: 9
End: 9
よく使うパターンとしては、こんな感じでしょうか。
APIにリクエストして、データを取得する(通信している間も操作はできる状態)
⇒取得次第データを表示する
#DispatchSemaphoreの使い方
続きはこちらに書きました。
http://qiita.com/koji-nishida/items/305808ff04d3ff818564