web-dev-qa-db-ja.com

非推奨のメソッドdispatch_get_current_queue()をどのように置き換えることができますか?

IOS 5でxmppframeworkを使用してチャットアプリケーションを開発しています。それは完全に動作します。

しかし、Xcodeを4.5.1に、iOS 5をiOS 6に、Mac OSを10.7.5に更新しましたが、非推奨の問題が原因でプロジェクトが機能しませんでした。これ以外のすべてのメソッドをiOS 6の新しいメソッドに置き換えました。

dispatch_get_current_queue()  

IOS 6でこのメソッドを置き換えるにはどうすればよいですか?

38
venkat

これは、この呼び出しで何を達成する必要があるかによって異なります。
Appleは、とにかくデバッグに使用する必要があると述べています。

おそらく、キューは重要ではありません(バックグラウンドキューが必要なだけなので)。特定の優先順位を持つグローバルキューを取得します(dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);

または、

同じキューでいくつかのコードを実行する必要がある場合は、キューを作成して保持し、すべてのタスクをそこにディスパッチします。

4
Nir Golan

NSOperationQueueはどうですか?

-(void) doSomeThing:(void (^)(BOOL success)) completionHandler
{
    NSOperationQueue* callbackQueue = [NSOperationQueue currentQueue];
    if(!callbackQueue) {
        callbackQueue = [NSOperationQueue mainQueue];
    }
    dispatch_async(...,^{
         // do heavyweight stuff here
         // then call completionHandler
         if(completionHandler) {
             [callbackQueue addOperationWithBlock:^{
                 completionHandler(...);
             }];
         }
    });
2
adib