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

时间:2013-06-28 11:07:11

标签: iphone ios objective-c ipad grand-central-dispatch

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

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);

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

2 个答案:

答案 0 :(得分:5)

如果块异步排队,您通常不必检查是否已经在主线程上which dispatch_after does

  

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

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

答案 1 :(得分:0)

是的,这是安全的。还有其他方法可以在主线程上执行操作,但我不认为它们更安全。您可以使用,例如:

[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ];

当不需要GCD的额外功能时,我真的更喜欢NSOperationQueue。这很容易。