2017-09-08 15 views
0

私はiOS上でワークスレッドやバックグラウンドスレッドのようなものをコーディングしています。タスクが入るたびに、私はそれをバックグラウンドスレッドに入れました。しかし、問題は、毎回このdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});を使用したくないということです。タスクが別のスレッドで実行され、スレッドの作成に多くの時間がかかるためです。バックグラウンドタスクを同じグローバルキューに追加する方法は?

私の質問は、GCDキューを作成して同じバックグラウンドスレッドで実行する方法です。結果が出てきたらメインスレッドに戻します。

答えて

1

「スレッド」と「キュー」は同じもののようです。ではない。キューは、1つ以上の実際のスレッドを使用して実装できる高レベルの抽象化です。

dispatch_get_global_queueを使用すると、毎回別のキューが表示される可能性があります。最初に行う必要があるのは、毎回新しいキューを要求するのではなく、使用する単一のキューを作成することです。単一のキューを作成するには、dispatch_queue_createを使用します。適切なスコープで参照を保存して、いつでも参照できるようにします。

キューが1つしかないので、キューが並行キューかシリアルキューかを判断する必要があります。シリアルキューは1スレッドのみを使用し、並行キューは複数スレッドを使用できます。 dispatch_queue_create関数のattrパラメータに適切な値を渡して、目的のキューを取得します。

のObjective-C:

let myQueue = DispatchQueue(label: "my_global_queue") // serial 

は、キューを作成します。

dispatch_async(myQueue, ^{ 
    // code 
}); 

スウィフト:

dispatch_queue_t myQueue = dispatch_queue_create(@"my_global_queue", DISPATCH_QUEUE_CONCURRENT); // or use DISPATCH_QUEUE_SERIAL 

は、キューを使用します。

は、キューを作成します。

か:

let myQueue = DispatchQueue(label: "my_global_queue", attributes: .concurrent) // concurrent 

キューを使用します。

myQueue.async { 
    // code 
} 
+0

大感謝を!私は自分のコードでやった –

関連する問題