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?