GCD由子线程返回到主线程,只有在这种情况下才会触发 RunLoop
。
当调用了dispatch_async(dispatch_get_main_queue(), <#^(void)block#>)
时libDispatch
会向主线程RunLoop
发送消息唤醒RunLoop
,RunLoop
从消息中获取block
,并且在__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
回调里执行这个block。不过这个操作仅限于主线程,其他线程dispatch
操作是全部由libDispatch
驱动的。