GCDの手法


基本的な使い方

dispatch_async(queue, ^{
処理
dispatch_async(mainQueue, ^{
メインスレッドでの処理
});
});

動作

  1. やりたいタスクの定義
  2. タスクをキューにつめる dispatch_async

キューの種類

  1. Serial Dispatch Queue キューで現在実行中の処理を待ってから実行されるためデータの競合が避けられる (複数のキューを作れば同時に実行は可能、ただし、キュー一つに1スレッドつかうのでメモリとシステム応答性能が損なわれる)
  2. Concurrent DIspatch Queue 待たない

キューの生成

  • 2番目の引数がNULLだとSerial
dispatch_queue_t queue = dispatch_queue_create("com.example.mySerialQueue",NULL);
  • 2番目の引数がDISPATCH_QUEUE_CONCURRENTだとConcurrent
 dispatch_queue_t queue = dispatch_queue_create("com,example.myConcurrentQueue", DISPATCH_QUEUE_CONCURRENT);
注 この名前はクラッシュログに表示される。アプリ名のような逆順

生成済みのキュー

これらはretainやreleaseする必要はない。
  • MainDispatchQueue メインスレッド(Serial) dispatch_main_queue()で取得。
  • GlobalDispatchQueue アプリ全体で使って良いConcurrent 通常Concurrentは生成しなくともこれを使えば良い。優先度に応じて4種ある dispatch_get_global_queue(***,0)で取得
    • High DISPATCH_QUEUE_PRIORITY_HIGH
    • Default DISPATCH_QUEUE_PRIORITY_DEFAULT
    • Low DISPATCH_QUEUE_PRIORITY_LOW
    • Background DISPATCH_QUEUE_PRIORITY_BACKGROUND


キューの破棄

dispatch_release(queue);
retainもある。

create,sync,すぐreleaseと書いてOK。syncで渡したBlockがqueueをretainしているので。
最終更新:2012年08月06日 14:58