2013-06-28 88 views
2

如果您已经在主线程中,在主线程上延迟分配一段代码是否安全?如何使用GCD在主线程上延迟后安全地分配代码?

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

还是有更安全的方法?如果我在主队列(主线程)上执行此操作时是否必须执行任何检查?

+0

我相信这不是“最大公约数”,而是“大中央调度”。 – Bhavin

+0

是的。不,你可能想用weakSelf来避免保留一个过时的视图控制器等。 –

回答

5

你一般不必检查块异步排队不管你已经在主线程,which dispatch_after does

这个函数等到指定的时间,然后异步加阻止对指定队列。

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

+0

我只是从主线程调用上述代码(用户按下按钮后)。你可以举一个例子来说明导致死锁的dispatch_sync吗? – openfrog

+0

相关:http://stackoverflow.com/a/13301110/846273 –

+0

dispatch_get_current_queue已弃用。 – openfrog

0

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

[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ]; 

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