0

なぜコードif (dispatch_get_current_queue() == socketQueue)が必要なのですか?dispatch_sync(socketQueue, block)なぜ直接使用できないのですか?

前もって感謝します!

- (BOOL)isConnected
{
__block BOOL result = NO;

dispatch_block_t block = ^{
    result = (flags & kConnected) ? YES : NO;
};

if (dispatch_get_current_queue() == socketQueue)
    block();
else
    dispatch_sync(socketQueue, block);

return result;
}

ところで、コードはXMPPFrameworkからのものです

4

1 に答える 1

2

dispatch_syncデッドロックが発生するため、現在のシリアルキューのブロックをスケジュールするために呼び出すことはできません。Dispatch_syncは、ブロックの実行が終了するまで待機しますが、現在のブロックの実行が終了する前に実行を開始することはありません。

于 2012-07-03T06:28:33.870 に答える