objective-c - GCD 在主线程中执行任务

标签 objective-c grand-central-dispatch

我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。

我是否需要检查我是否已经在主线程上 - 或者在调用下面的代码之前不执行此检查是否会受到任何惩罚?

dispatch_async(dispatch_get_main_queue(), ^{
   // do work here
});

最佳答案

不,你不需要检查你是否已经在主线程上。通过将 block 分派(dispatch)到主队列,您只是将 block 安排在主线程上串行执行,这发生在相应的运行循环运行时。

如果你已经在主线程上,行为是一样的:block被调度,在主线程的run loop运行时执行。

关于objective-c - GCD 在主线程中执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662360/

相关文章:

iphone - 为什么我没有用这个简单的代码读取任何磁场值?

ios - 使用 sections 将 indexPath 减一

ios - 自动写入文件不起作用

swift - 等待某个任务完全完成后再执行另一个任务

ios - 在 dispatch_async 中设置属性,但 block 完成后属性为 NULL

objective-c - KVO : how to call setValue. .. 在 setValue 内并且不会进入无限循环?

iphone - 使用 UITabBarController 添加持久化 UIView

ios - 在 Swift CLI 中使用 GCD

ios - 在 iOS 上使用 Grand Central Dispatch,如果常规 Objective-C block 不在调度队列中,它们会在哪个队列(如果有)上运行?

ios - DispatchGroup 多次返回