我知道这不是一个强有力的问题,但我必须澄清这个概念。
我定义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()
独立调用时主线程阻塞?