我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。
我是否需要检查我是否已经在主线程上 - 或者在调用下面的代码之前不执行此检查是否有任何惩罚?
dispatch_async(dispatch_get_main_queue(), ^{ // do work here });
不,您不需要检查您是否已经在主线程上。通过将块分派到主队列,您只是将块安排在主线程上串行执行,这发生在相应的运行循环运行时。
如果您已经在主线程上,则行为是相同的:该块被调度,并在主线程的运行循环运行时执行。