目前,NSNotifications允许针对一个帖子/事件的目标 - 行动机制。
我希望只有在触发两个事件后才会触发一个动作(运行一个函数)。
场景是我有两个异步进程需要在我调用该函数之前完成。也许我错过了什么,但我还没有办法做到这一点。或者也许我没有想到为什么这会是一个非常糟糕的主意?
此外,我的某些术语可能已关闭,因此请随时编辑并修复它。
答案 0 :(得分:0)
如何实现这一点有很多可能性。它们都围绕着跟踪哪些过程完成。最好的方法取决于您的后台进程的实现方式。
如果您使用的是NSOperationQueue,则可以添加第三个操作,将另外两个操作作为依赖项。这样你根本不需要处理通知。
否则,您可以计算完成的操作数量,并在计数器达到正确值时执行代码。 GCD将调度组作为一个很好的抽象。
首先创建一个调度组:
let group = dispatch_group_create()
然后为每个后台进程输入组:
dispatch_group_enter(group)
最后,您可以注册一个在组变空时被调用的块,即每个dispatch_group_enter由dispatch_group_leave平衡时:
dispatch_group_notify(group, dispatch_get_main_queue()) {
// All processes are done.
}
完成每个流程后,再次离开该群组:
dispatch_group_leave(group)
在调用dispatch_group_notify之前调用dispatch_group_enter非常重要,否则您的块将立即调度,因为该组已经为空。
执行通知块后,您可以重用该队列或将其丢弃。