2012-07-03 1 views
0

코드 if (dispatch_get_current_queue() == socketQueue)이 필요한 이유는 무엇입니까? 왜 우리는 그냥 dispatch_sync(socketQueue, block)을 직접 사용할 수 없습니까 ???dispatch_queue_t 및 dispatch_sync 호출 정보

미리 감사드립니다.

- (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; 
} 

BTW 코드는 당신이 교착 상태 때문에 현재의 일련 큐에 블록을 예약 dispatch_sync를 호출 할 수 없습니다 XMPPFramework

답변

2

에서입니다. Dispatch_sync는 블록 실행이 완료 될 때까지 대기하지만 현재 블록이 실행을 끝내기 전에 실행을 시작하지 않습니다.

+0

안녕 스벤, 다시 뵙겠습니다. 조금 불분명 함. dispatch_async는 블록이 __block 값을 변경 한 경우 어떻게 비동기식이 될 수 있습니까? – Henry