私はいくつかの関連する質問を見ましたが、誰もこのケースに答えていないようです。バックグラウンドでいくつかの作業を行うメソッドを作成したいと思います。元のメソッド呼び出しに使用されたのと同じスレッド/キューで完了コールバックを呼び出すには、このメソッドが必要です。
- (void)someMethod:(void (^)(BOOL result))completionHandler {
dispatch_queue_t current_queue = // ???
// some setup code here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL ok = // some result
// do some long running processing here
dispatch_async(current_queue, ^{
completionHandler(ok);
});
});
完了ハンドラーがへの呼び出しと同じキューまたはスレッドで呼び出されるように、ここではどのような魔法の呪文が必要sameMethod
ですか?メインスレッドを想定したくありません。そしてもちろんdispatch_get_current_queue
使用されるべきではありません。