もくもく独書 とは
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
- 作者: 石川洋資,西山勇世
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
上記の Swift実践入門を読みながら、思った事をTweetしていく取り組みです。
Swiftをはじめから丁寧にやっていきます。 なるべく毎日更新を目標にする。
リンク
前回:
次回:
今日の取り組み
今日もやってくぞー! 今日は第十二章「非同期処理」について。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
Swiftではスレッドを利用して非同期処理を実現しています。スレッドそのものを操作するためにコアライブラリのFoundationは "Thread" というクラスを提供しています。#もくもく独書
また、その他にもThreadを直接操作する事なく容易に非同期処理を行えるようにもなっています。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
Swiftで非同期処理を行うには次の3つの方法があります。
・GCDを用いる方法
・ Operation、OpetaionQueueを用いる方法
・ Threadクラスを用いる方法#もくもく独書
GDCは非同期処理を容易にするための技術で、GCDではキューを通じて非同期処理を行い、直接スレッドを管理することは不要となっています。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
GDCのキューをディスパッチキューといい、タスクの実行方式により直列・並列の二種に大別されています。#もくもく独書
直列ディスパッチキューは現在実行中の処理の終了を待ってから次の処理を実行する形式のもの。並列ディスパッチキューは現在実行中の処理を待たずに次の処理を並列して実行するもの、という違いがあります。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
#もくもく独書
ディスパッチキューを使用するには「既存のディスパッチキュー」を取得して使用するか、もしくは「新規のディスパッチキュー」を新しく作成して使用するかどちらかの方法で利用します。#もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
まず、既存のディスパッチキューの取得について。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
GCDは既存のディスパッチキューとして 1つのメインキューと複数のグローバルキューを提供しています。
メインキューは直列ディスパッチキューであり、グローバルキューは並列ディスパッチキューです。#もくもく独書
メインキューの取得は画像のように DispatchQueue型のmainを参照します。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
グローバルキューは5種類ある実行優先度(QoS)を指定して取得します。pic.twitter.com/7zsTndhaA5#もくもく独書
新規のディスパッチキューを作成する方法としてはDispatchQueue型のイニシャライザからインスタンスを作る方法があります。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
画像のlabelはなるべくユニークのものを指定する事でXCode上のデバッグで活用できます。pic.twitter.com/JbvWEdt71m#もくもく独書
取得あるいは新規で作成したディスパッチキューにタスクを追加するには、DispatchQueue型のasync(execute:)メソッドを用います。
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
ディスパッチキューではタスクはクロージャで表され、並列・直列のディスパッチキューもどちらもタスクの追加方法は同じです。pic.twitter.com/9FWzDoanBQ#もくもく独書
GCDはlibdispatchで実装されているのに対しFoundationにも非同期処理を実行するOperation、OpetaionQueueがある。Operationクラスは実行されるタスクとその情報をカプセル化したものです。#もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) June 10, 2018
まず、タスクはOperationクラスのサブクラスとして定義します。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年6月10日
キューはOperationQueueで扱い、addOperationメソッドによりタスクを追加していきます。pic.twitter.com/XVrkrz05Bt#もくもく独書
GCD、Opeationクラスについてはスレッドの生成はいい感じにしてくれるものだけどThreadクラスは実装者側で実装する必要がある。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年6月10日
実装方法としては下記のようなイメージです。pic.twitter.com/IT6WGrHvHC#もくもく独書
本日のもくもく独書は終了。第十二章は非同期処理についてだった。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年6月10日
どれもThreadクラスをいいようにしてくれるものでどれでもぶっちゃけ同じものは実現できる。そのため、それぞれの違いをちゃんと理解して使い分けできる事が重要ですね。#もくもく独書
Swift実践入門について
今はSwift4対応の改訂版出てるのでそっち読んだほうがいいよ。多分。
[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
- 作者: 石川洋資,西山勇世
- 出版社/メーカー: 技術評論社
- 発売日: 2018/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る