主队列异步串行问题

来源:8-1 GCD相关面试问题

陈关健

2018-11-09

  • (void)viewDidLoad {
    [super viewDidLoad];
    //主队列本身也是串行队列
    dispatch_async(dispatch_get_main_queue(), ^{

        [self doSomething];
    });
    

    }
    老师,您说主队列当中提交的任务无论是同步还是异步最终都是在主线程中执行,而主队列也是串行队列,这里怎么不会死锁呢,是因为主队列中的异步方法会创建新的队列吗?有点不明白

写回答

1回答

于海

2018-11-09

同步方式或者异步方式提交到主队列的任务都是在主线程上执行。问题中的异步分派到主队列不会产生卡死,原因是主队列是串行队列,异步方式提交的任务会先排队,当前任务执行完成才会执行后续提交进来的任务

0
1
陈关健
嗯嗯,老师我对底层的实现还是有点疑问: 当前的任务viewDidLoad里面不是包括了后续异步提交的block方法吗?其后续异步提交的block跟当前任务的ViewDidLoad底层是怎么做到相互不需要等待了呢
2018-11-10
共1条回复

资深大牛带你深度剖析ios高级面试

从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系

1750 学习 · 600 问题

查看课程