Почему вызов dispatch_sync () в главной очереди блокирует основную очередь?

Я знаю, что это не сильный вопрос, но я должен очистить свой разум от этой концепции.

Я определилmyBlock следующее.

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

Сейчас вviewDidLoad метод, когда я используюdispatch_sync() метод независимо от главной очереди, тогда главная очередь блокируется.

Вот образец.

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

Но Но, когда я использую то же самоеdispatch_sync() функция в основном потоке внутри блокаdispatch_async() функция, которая запускается в параллельной очереди, тогда основной поток не блокируется.

Вот образец.

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

Мне не понятно, почему это происходит? Почему основной поток заблокирован при вызовеdispatch_sync() независимо?

Ответы на вопрос(5)

Ваш ответ на вопрос