¿Por qué la llamada dispatch_sync () en la cola principal está bloqueando la cola principal?

Sé que esta no es una pregunta fuerte, pero tengo que aclarar mi mente sobre este concepto.

He definidomyBlock como sigue.

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

Ahora enviewDidLoad método cuando utilizo eldispatch_sync() método independientemente en la cola principal, entonces la cola principal se bloquea.

Aquí está la muestra.

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

Pero pero, cuando uso el mismodispatch_sync() función en el hilo principal dentro de un bloque dedispatch_async() función que se activa en la cola concurrente, entonces el hilo principal no se bloquea.

Aquí está la muestra.

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

No tengo claro por qué sucede esto? Por qué el hilo principal está bloqueado al llamardispatch_sync() ¿independientemente?

Respuestas a la pregunta(5)

Su respuesta a la pregunta