我理解dispatch_async()
在后台线程上运行某些东西,而dispatch_main()
在主线程上运行它,那么dispatch_sync()
在哪里进来?
答案 0 :(得分:6)
您通常不想使用dispatch_main()
。它适用于常规应用程序以外的其他事物(系统守护程序等)。事实上,如果你在常规应用中调用它,它肯定会破坏你的程序。
dispatch_sync
在队列上运行一个块并等待它完成,dispatch_async
在队列上运行一个块并且不等待它完成。
串行队列按顺序一次运行一个块。并发队列一次运行多个块,因此不一定按顺序排列。
(编辑)
也许当你说dispatch_main()
时你正在考虑dispatch_get_main_queue()
?
答案 1 :(得分:2)
dispatch_main()
不适用于在主线程上运行 - 它运行GCD块调度程序。在普通应用中,您不需要或不想使用它。
dispatch_sync()
阻止当前线程,直到块完成。这可能是也可能不是主线。
如果要在主线程上运行某些东西,可以使用dispatch_get_main_queue()
获取主队列,并使用一次正常的分派方法在那里运行一个块。