Почему вызов 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()
независимо?