問題分析:主線程執(zhí)行下面方法,這種情況為什么會(huì)死鎖?
-(void)viewDidLoad
{
dispatch_sync(dispatch_get_main_queue(),block());
}
1.理解dispatch_sync dispatch_async 的工作流程
dispatch_sync(queue,block) 做了兩件事:
1)將block添加到queue隊(duì)列中
2)阻塞調(diào)用線程,等待block()執(zhí)行結(jié)束,回到調(diào)用線程。
dispatch_async(queue,block) 做了兩件事
1)將block添加到queue隊(duì)列;
2)直接回到調(diào)用線程(不阻塞調(diào)用線程)。
2.當(dāng)在main_thread中調(diào)用dispatch_sync 時(shí):
1)main_thread被阻塞,無法繼續(xù)執(zhí)行;
2)同步派發(fā)sync導(dǎo)致block()需要在main_thread中執(zhí)行結(jié)束才回返回;
3)而此時(shí)main_thread被阻塞,二者相互等待,死鎖。