teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

スレッドに関係なく、純粋に同期処理と非同期処理に関しての言及に修正

2020/04/17 09:28

投稿

miyabi_pudding
miyabi_pudding

スコア9570

answer CHANGED
@@ -1,27 +1,31 @@
1
1
  ざっくり簡単に説明します。
2
2
 
3
3
  # 同期処理
4
- 同期処理は、一つスレッドで、直列で順番に処理が行われることです。
4
+ 同期処理は、順番通り(だいたい言語はの行から)直列で順番に処理が行われることです。
5
5
  ある処理が先に走ったとき、その処理が終了するまで、次の処理は実行されません。
6
6
  だいたいの言語で、普通に処理を書けば、この同期処理になります。
7
7
  変数の値保証が基本的にされるので、
8
8
  非同期にしたいなど特に無ければ、同期処理のままにするのが基本です。
9
9
 
10
10
  # 非同期処理
11
- メインのスレッドと違うスレッドで実行させる処理です。
11
+ メインの処理が動きつつも並行して実行させる処理です。
12
- ゆえに、メインのスレッドが実行されてる間に、同時に処理が行われるので、
12
+ ゆえに、メインの処理が実行されてる間に、同時に処理を進めることできるので、
13
13
  重い処理をバックグラウンド(非同期)で実行させることにより、
14
14
  メインの処理、表示に影響を出さずにいれます。
15
+ ようは、重い処理の終了を同期的に待たずに、軽い処理やメインの処理を先に実行、とすることができるというわけです。
15
16
  よく使われる処理としては、HTTP通信でのAPI使用時に、レスポンスを受け取るとかです。
16
17
  また、読み込みの処理や、デバイス内の重いデータの読み込みなんかにもよく使用されます。
17
18
  利点としては上記の通りですが、
18
19
  デメリットというか、注意点としては、非同期で変数を定義、代入としたときに、
19
20
  メインの処理でその変数を使いたいってときに、変数にまだ値が入ってない!ってことが起きやすいことです。
20
21
  よって、非同期処理の際は、基本的に、処理が終わった際に実行されるコールバックを用意し、
21
- そのコールバックで、メインのスレッドの変数に代入、処理の続きを行う、ということをします。
22
+ そのコールバックで、メインの処理の変数に代入、処理の続きを行う、ということをします。
22
23
  Swiftでよく使うフレームワークである、
23
24
  UIKit/AppKitにおいては、非同期処理の多くは、**デリゲート**を使用しています。
24
25
 
26
+ また、今回の話は、**スレッド**についても深く関係してきますので、
27
+ より理解するには、学習が必要かと思います。
28
+
25
29
  上記二つの他、**並列処理**というものがありますが、(非同期処理と非常に似てるが、違う)
26
30
  本件では割愛します。
27
31
 

2

デリゲートの多用は、swiftではなく、swiftでよく使用するフレームワークにおいてと追記

2020/04/17 09:28

投稿

miyabi_pudding
miyabi_pudding

スコア9570

answer CHANGED
@@ -19,7 +19,8 @@
19
19
  メインの処理でその変数を使いたいってときに、変数にまだ値が入ってない!ってことが起きやすいことです。
20
20
  よって、非同期処理の際は、基本的に、処理が終わった際に実行されるコールバックを用意し、
21
21
  そのコールバックで、メインのスレッドの変数に代入、処理の続きを行う、ということをします。
22
+ Swiftでよく使うフレームワークである、
22
- Swiftにおいては、非同期処理の多くは、**デリゲート**を使用しています。
23
+ UIKit/AppKitにおいては、非同期処理の多くは、**デリゲート**を使用しています。
23
24
 
24
25
  上記二つの他、**並列処理**というものがありますが、(非同期処理と非常に似てるが、違う)
25
26
  本件では割愛します。

1

学習方法を提示

2020/04/17 05:07

投稿

miyabi_pudding
miyabi_pudding

スコア9570

answer CHANGED
@@ -24,4 +24,10 @@
24
24
  上記二つの他、**並列処理**というものがありますが、(非同期処理と非常に似てるが、違う)
25
25
  本件では割愛します。
26
26
 
27
- 各用語に関しては、ご自身でお調べください。
27
+ 各用語に関しては、ご自身でお調べください。
28
+
29
+ 学習の仕方ですが・・・、一番いいのは、WebAPI用意してー、ですが、(最近はよくAPI処理をする案件がほとんどのため)
30
+ デバイス内の重いファイルに対しての非同期処理、といった形で練習すればいいのではないでしょうか?
31
+ APIに関しては、書籍もいっぱいありますし、
32
+ 画像や動画処理に関しては、書籍もいっぱいありますし、
33
+ Swiftの練習としてはかなりいい教材になると思いますよ。