如何使用GCD在主线程上延迟后安全地调度代码?

ope*_*rog 2 iphone objective-c grand-central-dispatch ipad ios

如果你已经在主线程上,在主线程上发送延迟代码块是否安全?

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);
Run Code Online (Sandbox Code Playgroud)

或者有更安全的方式吗?如果我在执行此操作时已经在主队列(主线程)上,是否必须执行任何检查?

omz*_*omz 5

如果块以异步方式排队,通常不必检查是否已经在主线程上,这样dispatch_after:

此函数等待直到指定的时间,然后异步地将块添加到指定的队列.

但是,如果您使用的是同步功能,则必须检查dispatch_sync.否则会导致僵局.