如果您已经在主线程上,那么在主线程上延迟调度代码块是否安全?
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);
或者有没有更安全的方法?如果我在执行此操作时已经在主队列(主线程)上,是否必须执行任何检查?
如果您已经在主线程上,那么在主线程上延迟调度代码块是否安全?
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);
或者有没有更安全的方法?如果我在执行此操作时已经在主队列(主线程)上,是否必须执行任何检查?
如果块被异步排队,您通常不必检查您是否已经在主线程上,这样dispatch_after
做:
该函数等待到指定时间,然后异步将块添加到指定队列。
但是,您必须检查,如果您使用的是同步函数,例如dispatch_sync
. 否则会导致死锁。
是的,它是安全的。还有其他方法可以在主线程上执行操作,但我不认为它们更安全。您可以使用,例如:
[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ];
当不需要 GCD 的额外功能时,我真的更喜欢 NSOperationQueue。这更容易。