问题分析:主线程执行下面方法,这种情况为什么会死锁?
-(void)viewDidLoad
{
dispatch_sync(dispatch_get_main_queue(),block());
}
1.理解dispatch_sync dispatch_async 的工作流程
dispatch_sync(queue,block) 做了两件事:
1)将block添加到queue队列中
2)阻塞调用线程,等待block()执行结束,回到调用线程。
dispatch_async(queue,block) 做了两件事
1)将block添加到queue队列;
2)直接回到调用线程(不阻塞调用线程)。
2.当在main_thread中调用dispatch_sync 时:
1)main_thread被阻塞,无法继续执行;
2)同步派发sync导致block()需要在main_thread中执行结束才回返回;
3)而此时main_thread被阻塞,二者相互等待,死锁。