GCDの手法
基本的な使い方
dispatch_async(queue, ^{
処理
dispatch_async(mainQueue, ^{
メインスレッドでの処理
});
});
動作
- やりたいタスクの定義
- タスクをキューにつめる dispatch_async
キューの種類
- Serial Dispatch Queue キューで現在実行中の処理を待ってから実行されるためデータの競合が避けられる (複数のキューを作れば同時に実行は可能、ただし、キュー一つに1スレッドつかうのでメモリとシステム応答性能が損なわれる)
- Concurrent DIspatch Queue 待たない
キューの生成
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