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

时间:2015-06-14 06:17:19

标签: ios notifications observer-pattern

目前,NSNotifications允许针对一个帖子/事件的目标 - 行动机制。

我希望只有在触发两个事件后才会触发一个动作(运行一个函数)。

场景是我有两个异步进程需要在我调用该函数之前完成。也许我错过了什么,但我还没有办法做到这一点。或者也许我没有想到为什么这会是一个非常糟糕的主意?

此外,我的某些术语可能已关闭,因此请随时编辑并修复它。

1 个答案:

答案 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非常重要,否则您的块将立即调度,因为该组已经为空。

执行通知块后,您可以重用该队列或将其丢弃。