viewDidLoad中的代码,会进入主队列吗?

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

精慕门3369597

2021-12-13

请问线程与GCD队列之间是什么关系呢?一般运行的代码会进入GCD的主队列吗?

比如

- (void)viewDidLoad {
    [super viewDidLoad];
  
    NSLog(@"1");
    
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    
    NSLog(@"3");
}

中,NSLog(@"1");NSLog(@"3");会进入主队列中执行吗?
是因为它们进入了主队列,
dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2"); });
这种写法才会卡死吗?

我的猜想是:
1.所有消息传递(方法调用)都会被登记为一个任务加入到主线程中
2.在xcode打断点看到的图片描述
就是主队列。
3.com.apple.main-thread应该就是dispatch_get_main_queue()和NSOperation中一样的主队列。

请问我的猜想有几个是正确的呢?

写回答

1回答

于海

2021-12-18

ViewDidLoad方法是在主线程执行的,提交到主队列的任务都是在主线程中执行。主线程中的任务是要串行执行的

0
0

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

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

1749 学习 · 600 问题

查看课程