此代码在调用dispatch_sync时阻塞。我是派遣队列的新手。这会阻止什么原因?
NSLog(@"%@",dispatch_get_current_queue());
NSLog(@"%@",dispatch_get_main_queue());
if (dispatch_get_current_queue() == dispatch_get_main_queue())
{
block();
}
else
dispatch_sync(dispatch_get_main_queue(),block);
日志打印这些队列
OS_dispatch_queue_root:com.apple.root.low-priority [0x345bbc0]
OS_dispatch_queue:com.apple.main-thread [0x345b900]>
答案 0 :(得分:3)
将当前队列与主队列进行比较不是检查您是否在主线程上运行的有效方法。
dispatch_get_main_queue()的结果可能与也可能不相等 dispatch_get_current_queue()的结果 在主线程上调用时。比较这两者不是测试代码是否正在执行的有效方法 在主线程上。 Foundation / AppKit程序应该使用[NSThread isMainThread]。 POSIX程序可以 使用pthread_main_np(3)。
dispatch_get_current_queue()已弃用,仅用于调试,因此您不应在生产代码中使用它。
没有必要检查这个队列是否是主队列,只需在主队列上调度它,它就会到达那里。