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

我是否需要判断我是否已经在主线程上,或者在调用下面的代码之前不执行此判断是否有任何惩罚?

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

推荐答案

不,你不需要判断你是否已经在主线程上.通过将块分配到主队列,您只需将块安排在主线程上串行执行,这在相应的运行循环运行时发生.

如果您已经在主线程上,行为是相同的:该块被调度,并在主线程的运行循环运行时执行.

Objective-c相关问答推荐

UICollectionView:一行或一列

当 UITextField 成为第一响应者时如何使 UIScrollView 自动滚动

UITabBar 中的自定义 colored颜色

如何在 iOS Objective-C 头文件中将函数标记为已弃用?

animateWithDuration:animations: 会阻塞主线程吗?

Objective C for循环中断并继续

让 iPhone sleeping

指向方法返回类型的Expected a type错误

使用 NSMutableArray 的二维数组

lldb 无法打印变量值并显示错误:对 'id' 的引用不明确

Objective C 静态类变量

以编程方式创建 UITableView

iOS 崩溃日志(log)中的异常类型

在 NSNumbers 的 NSArray 中查找最小值和最大值

CFURLCopyResourcePropertyForKey 失败,因为通过 URL 没有方案

如何在表格视图中的两个单元格之间留出空间?

UIWebView didFinishLoading 多次触发

Objective-c 中 SEL 类型的属性

Apple 说 NSManagedObjectContext 归创建它的线程或队列所有时是什么意思?

如何在 Objective-C 中创建可变参数方法