1. ホーム
  2. objective-c

[解決済み] iOS 6 の補完ブロックの dispatch_get_current_queue() の代わりとなるものは?

2022-12-22 03:36:05

質問

ブロックと完了ブロックを受け取るメソッドがあります。最初のブロックはバックグラウンドで実行され、完了ブロックはメソッドが呼び出された任意のキューで実行される必要があります。

後者については、私はいつも dispatch_get_current_queue() を使っていましたが、iOS 6 以降では非推奨のようです。代わりに何を使うべきでしょうか?

どのように解決するのですか?

呼び出し元が乗っていたキューなら何でも実行する"というパターンは魅力的ですが、最終的には素晴らしいアイデアではありません。そのキューは、低優先度キュー、メインキュー、または奇妙なプロパティを持つ他のキューである可能性があります。

これに対する私の好きなアプローチは、quot;補完ブロックは、これらのプロパティ: x、y、z" を持つ実装定義キュー上で実行され、呼び出し側がそれ以上の制御を望む場合、ブロックに特定のキューへのディスパッチをさせることです。指定するプロパティの典型的なセットは、「serial, non-reentrant, and async with respect to any other application-visible queue"」のようなものでしょう。

** 編集 **

Catfish_Manが下のコメントで例を挙げてくれたので、彼の答えに追加しておきます。

- (void) aMethodWithCompletionBlock:(dispatch_block_t)completionHandler     
{ 
    dispatch_async(self.workQueue, ^{ 
        [self doSomeWork]; 
        dispatch_async(self.callbackQueue, completionHandler); 
    } 
}