0

CFNetwork スレッドから、メイン キューで何らかの処理を行い、非同期で結果を取得したいと考えています。現在、結果を取得するために、で取得したキューに結果をディスパッチしていますdispatch_get_current_queue

dispatch_queue_t baseQueue = dispatch_get_current_queue();
dispatch_async(dispatch_get_main_queue(), ^{
    NSString* content = [self processSomething];
    dispatch_async(baseQueue, ^{
        [self sendResults:result];
    });
});

残念ながら、dispatch_get_current_queue非推奨です。を使用せずにどうすれば同じことを達成できdispatch_get_current_queueますか?

4

1 に答える 1

1

CFNetwork は実行ループ ベースです。求めていることを実現するには、CFRunLoopAPI を使用できます。このような:

// ...from some code called by CFNetwork on its run loop
CFRunLoop cfNetworkRunLoop = CFRunLoopGetCurrent();
dispatch_async(dispatch_get_main_queue(), ^{

    // On the main thread...
    NSString* content = [self processSomething];

    CFRunLoopPerformBlock(cfNetworkRunLoop, kCFRunLoopCommonModes, ^{
        // Back on CFNetwork's run loop
        [self sendResults:result];
    });
    // Necessary for your block to run right away, otherwise it might 
    // be delayed (until something else wakes up the run loop.)
    CFRunLoopWakeUp(cfNetworkRunLoop);
});

それが役立つことを願っています。

于 2013-09-12T18:36:59.120 に答える