同時実行制御
並行性は、同時に複数のものを実行する方法です。アプリケーションでは、同時実行性とは、同時に/同時に実行される複数のタスクを指します。
同時実行性により、アプリケーションがより高速でクリーンになり、ユーザーのエクスペリエンスが向上します。マルチスレッドの使用は多くの開発者にとって難しいように思われますが、APIはNSOperation そして Dispatch Queues アプリケーションで同時実行性とマルチスレッドを簡単に使用できるようにします。
グランドセントラルディスパッチ
GCDは、並行コードを管理し、システムレベルで非同期的に操作を実行するために最も一般的に使用されるAPIです。GCDは、タスクのキューを提供および使用します。これらのキューは、FIFO用語を使用するデータ構造です。つまり、キューの最初の場所のタスクが最初に実行され、キューの最後のタスクが最後に実行されます。
例-映画のチケット予約ラインを考えてみましょう。あなたが最後の人である場合、あなたは最後にチケットを受け取り、誰かがあなたの後に来る場合、彼はあなたの後にチケットを受け取ります。
ディスパッチキュー
ディスパッチキューは、アプリケーションでタスクを非同期かつ同時に実行する簡単な方法です。キューには2つのタイプがあります-
Serial Queues −タスクを一連の方法で保存し、一度に1つのタスクを実行します。
Concurrent Queues −タスクを一連の方法で保存し、一度に1つのタスクを実行します。
キューの作成または取得に使用される関数のいくつかは次のとおりです。
dispatch_queue_create
// create a serial or concurrent queue
dispatch_queue_get_label
// get the label of a given queue
dispatch_get_main_queue
// get the one and only main queue
dispatch_get_global_queue
// get one of the global concurrent queues
キューへのタスクの追加
キューにタスクを追加するのに役立つ2種類の関数があります。彼らは-
Synchronous Functions −
dispatch_once −アプリケーションの有効期間が終了した場合にのみ、タスクを送信します。
dispatch_sync −タスクをキューに送信し、タスクが完了したときにのみ戻ります。
Asynchronous Functions −
Dispatch_async −タスクを送信して戻ります。
Dispatch_after −すぐに戻りますが、特定の時間遅延します。
Dispatch_async −すぐに戻りますが、タスクは複数回送信されます。
サンプルコード
以下は、タスクをキューに追加するためのサンプルコードです。
dispatch_async(dispatch_get_main_queue(), update_block);
// add update_block to main queue
dispatch_apply(i, some_queue, work_block)
// add work_block to some_queue i times
dispatch_sync(background_queue, blocking_block)
// add blocking block to background queue and wait for completion
キューの一般的な使用例
次のコードは、キューの使用例です。
dispatch_async(background_queue, ^ {
// Perform code that takes long time, here.
Dispatch_async(dispatch_get_main_queue(), ^ {
//Some other task, generally UI.
});
});
中間のiOS開発者になるまでは十分な情報であるため、同時実行制御で行うのはこれだけです。
学んだ概念を練習し続け、要件に応じてそれらを変更および統合してみてください。