Por que a chamada dispatch_sync () na fila principal está bloqueando a fila principal?

Eu sei que esta não é uma questão forte, mas tenho que limpar minha mente sobre este conceito.

Eu definimyBlock do seguinte modo.

void(^myBlock)(void) = ^{
   for(int i = 0;i < 10 ; i++)
   {
       NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
   } 
};

Agora emviewDidLoad método quando eu uso odispatch_sync() método independentemente na fila principal, em seguida, a fila principal fica bloqueada.

Aqui está a amostra.

- (void)viewDidLoad
 {
    [super viewDidLoad];
    dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_sync(queue,myBlock);
 }

Mas quando eu uso o mesmodispatch_sync() função no thread principal Dentro de um bloco dedispatch_async() função que é acionada na fila simultânea, então o segmento principal não é bloqueado.

Aqui está a amostra.

- (void)viewDidLoad
 {
    [super viewDidLoad];
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue,^{  

        dispatch_sync(dispatch_get_main_queue(),myBlock);
    });
 }

Não estou claro porque isso está acontecendo? Por que o thread principal foi bloqueado ao chamardispatch_sync() independentemente?

questionAnswers(5)

yourAnswerToTheQuestion