2

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

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

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

4

2 回答 2

5

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

该函数等待到指定时间,然后异步将块添加到指定队列。

但是,您必须检查,如果您使用的是同步函数,例如dispatch_sync. 否则会导致死锁。

于 2013-06-28T11:42:37.157 回答
0

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

[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ];

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

于 2013-06-28T11:31:41.603 回答