如果你已经在主线程上,在主线程上调度延迟代码块是否安全?
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), theBlock);
或者有更安全的方式吗?如果我在执行此操作时已经在主队列(主线程)上,是否必须执行任何检查?
答案 0 :(得分:5)
如果块异步排队,您通常不必检查是否已经在主线程上which dispatch_after
does:
此函数一直等到指定的时间,然后异步地将块添加到指定的队列。
但是,如果您使用dispatch_sync
之类的同步功能,则必须检查。否则会导致僵局。
答案 1 :(得分:0)
是的,这是安全的。还有其他方法可以在主线程上执行操作,但我不认为它们更安全。您可以使用,例如:
[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ];
当不需要GCD的额外功能时,我真的更喜欢NSOperationQueue。这很容易。