Grand Central Dispatch的主要内容究竟是什么?它是程序启动时创建的线程(可能就在调用main()
函数之前),这被任意称为“主线程”?或者它是程序的主要执行流程,它始终是为每个正在运行的流程创建的?我认为第一个选项是正确的选项,因为我想,除非这是明确完成的,否则不可能发送程序主执行流程执行的块。因此,GCD中的主线程必须是为等待块执行而创建的另一个线程。是不是?
答案 0 :(得分:1)
除非在基于CF / Foundation的流程中运行,否则GCD没有主线程。如果使用dispatch_main则没有主线程。
答案 1 :(得分:1)
OS X上的每个UI应用程序都有一个主线程 - 它是执行UI更新的地方。 GCD将一个队列与这个线程(主队列)相关联,并且也可以自由地从该线程上的其他队列执行块,但实际上,它通常会为此目的创建其他线程,因为通常认为阻塞主线程是不可取的。任何时间长度(这样做会带来可怕的SPOD,或者旋转死亡的比萨饼,光标)。
调用dispatch_main()也不会破坏或消除对主线程的需求,它只是阻止它(这就是为什么UI应用应该使用运行循环)。