- (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"......."); }); }
这样会死锁,这我一直都知道,但我之前都是这么理解的,因为sync是同步执行,会阻塞当前线程(主线程)等待block内容执行完在继续,而block内容恰恰是在主线程中执行,已经被阻塞了,所以导致了死锁。
但是我在听8-1章节的时候,听老师你说凡是dispatch_sync执行,不管是什么队列都是在当前线程执行,那么
- (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(serial_queue, ^{ NSLog(@"......."); }); }
block中的内容也是在主线程中执行,那么也跟第一种情况一样了啊,sync阻塞了当前线程(主线程),block恰恰需要主线程中执行,死锁了岂不是?但事实是这种不会死锁。有点懵了。老师给分析一下吧。