可有人请我提供的,当你将使用信号量时使用DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER的例子吗?信号灯:DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER
是什么2之间和我会用什么情况下,一个比其他的区别?
按照文档DISPATCH_TIME_NOW装置立即暂停。 DISPATCH_TIME_FOREVER表示超时无限。
为什么你想前者,即:立即暂停。
可有人请我提供的,当你将使用信号量时使用DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER的例子吗?信号灯:DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER
是什么2之间和我会用什么情况下,一个比其他的区别?
按照文档DISPATCH_TIME_NOW装置立即暂停。 DISPATCH_TIME_FOREVER表示超时无限。
为什么你想前者,即:立即暂停。
您可以立即超时检查,如果一个块已完成计算。同样,您可以永久等待,直到完成一个块,然后继续执行另一个块。
如果一组完成看起来是这样的检查的一个例子。
if (dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_NOW) == 0) {
// myDispatchGroup is finished...
} else {
// myDispatchGroup is _not_ finished...
}
检查一个组是否完成等待永久没有意义,因为该函数将永远等待。相反,我们使用该功能来同步阻塞(在暂停或等待时阻塞,而不是在GCD块中),直到组完成。
// Enqueue myDispatchGroup
// Wait for it to finish
dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_FOREVER);
// Do other work that depends on myDispatchGroup being completed
可以公平地说,DISPATCH_TIME_FOREVER用于组创建,而DISPATCH_TIME_NOW用于组查询? – dubbeat
我不会说群体“创造”,因为等待永远做的一件很常见的事情是使用'dispatch_release(group);'释放群体。我会称之为组依赖关系。 –
使调用“dispatch_group_wait(myDispatchGroup,DISPATCH_TIME_FOREVER);'是正确的做法的情况数量非常小。大多数时候这会阻止。阻塞主线程不好,阻塞GCD线程(可能)不好。使用'dispatch_group_notify'排队一个块,当你的组完成而不阻塞排队线程时运行。 – ipmcc
您是指DISPATCH_TIME_NOW与DISPATCH_TIME_FOREVER? –
呃,对不起。这是一个错字。现在更正 – dubbeat