經(jīng)典demo:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
//換異步
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"打印2");
});
}
屏幕快照 2018-03-16 11.02.50.png
分析一下這個Demo的流程隙咸。首先打印1成洗,然后調(diào)用sync方法瓶殃。在主線程中遥椿,我需要執(zhí)行sync方法淆储。sync方法中有一個打印2的事情遏考。也要在主線程去做蓝谨。由于主線程同一時間只能做一件事譬巫。于是打印2需要等待sync方法完成再去執(zhí)行芦昔。而sync同步方法的完成,需要等待block中的打印2完成珠十。于是就形成了死鎖焙蹭。兩個事件相互等待嫂伞。