2013-05-20 2 views
2

발송 그룹은 특정 대기열로 발송할 블록을 제출할 수있는 GCD 기능입니다. 대기열과 관련하여 블록은 대기열 유형에 따라 발송됩니다. 대기열이 연속이면 해당 대기열과 관련하여 블록이 연속적으로 실행됩니다. 대기열이 동시성 일 경우 동일하지만 동시에 발생합니다.디스패치 그룹에 제출 된 블록이 순차적으로 또는 동시에 실행됩니까?

그러나 그룹과 관련하여 발송은 서로 관련하여 순차적으로 또는 동시에 발생합니까? 그룹에 디스패치 대기열 및 전달할 대기열이있는 경우 이전 그룹이 완료 될 때만 다음 발송이 실행됩니까?

답변

6

디스패치 그룹의 멤버쉽은 실행 순서와 관계가 없습니다.

디스패치 그룹은 실제로 카운터 일 뿐이며 dispatch_group_enter(group)은 카운터를 증가시키고 dispatch_group_leave(group)은 카운터를 감소시킵니다.

dispatch_group_enter(group); 
dispatch_async(queue, ^{ 
    block(); 
    dispatch_group_leave(group); 
}); 

dispatch_group_async(group, queue, block) 통해 전송 블록들의 실행 순서는 단지 지정된 queue (들)에 따라 달라

dispatch_group_async(group, queue, block)는 바로 가기이다.

디스패치 그룹 카운터에 도달하면 제로, dispatch_group_wait(group)의 모든 웨이터가 깨어 있으며, dispatch_group_notify(group, queue, block)를 통해 그룹에 제출 된 모든 블록이 모두 각각의 queue들에 async'd된다 (그룹이 비어된다) (즉, 지정된 블록 queue이 동시/독립적 인 경우이 블록이 동시에 실행될 수 있습니다.

+1

아주 좋습니다. 고마워요! – LuisABOL

관련 문제