NSNotification - 具有多个事件触发的观察者

NSNotification - observer with multiple events to trigger

就目前而言,NSNotifications 允许一个目标动作机制来响应一个 post / 事件。

我想要一个仅在触发两个事件后才触发操作(运行函数)的通知。

场景是我有两个异步进程需要先完成才能调用该函数。也许我遗漏了什么,但我还没有找到一种方法来做到这一点。或许我没有想到一个明显的原因,为什么这会是一个非常糟糕的主意?

此外,我的一些术语可能有误,请随时编辑和修复它。

关于如何实现它有很多可能性。它们都围绕着跟踪哪些流程已完成。最好的方法取决于您的后台进程是如何实现的。

如果您使用的是 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 很重要,否则您的块将被立即安排,因为该组已经空了。

执行通知块后,您可以重新使用队列或丢弃它。