使 NSOperations 互斥

Make NSOperations Mutually exclusive

从 WWDC 引用此视频 https://developer.apple.com/videos/play/wwdc2015/226/ 演讲者展示了我们可以在两个相同类型的 NSopeation 实例之间添加依赖关系。显示警报的 NSoperation 示例。通过实现这一点,我们可以确保我们不会同时抛出多个警报并惹恼用户。 如果一个警报已经显示,下一个将等待。

我仍然无法弄清楚如何实现 NSOperations 交叉的这种依赖性 queue.In 更简单的话任何人都可以展示以下两件事的示例(实现)。

1.Implementation 添加队列 2 中的操作 B 对队列 1 中的操作 A 的依赖性。

2.Implementation 添加相同 NSOperation 类型的多个实例的依赖项,即使它们在不同的队列中。示例:如果我将 "AlertOperation" 的多个实例添加到不同的队列,我想确保它们仍然按顺序发生。

如果示例在 Objective C 中,我将不胜感激。 如果需要,请要求更多说明。

根据评论,基本问题是:

how can I add a dependency to an existing operation when I don't have a reference to it

您应该创建多个不同的队列,特别是在本例中创建一个仅用于警报操作的队列。从技术上讲,它可以与单个队列一起使用,但您需要做更多的工作。

对于特定的队列,您可以简单地迭代队列中当前的操作并为每个操作添加依赖项。如果您没有特定的队列,那么您需要进行 class 测试(或使用其他一些逻辑)来确定要向哪些操作添加依赖项。

我是提出 session 的工程师。

简短的回答是,为了使您的第二个操作依赖于第一个操作,您必须维护对第一个操作的引用。

session 提供的示例代码使用全局 table 跟踪所有 currently-executing 操作。 When a new operation comes in that specifies it should be mutually exclusive with other operations of the same kind, the code looks up in the table for the other operations of the same kind。然后新操作依赖于列表中的最后一个操作。

由于 table 是一个全局的 table,它的工作与实际执行操作的队列无关。它唯一需要的是使用自定义 NSOperationQueue 子类(“OperationQueue”)作为执行操作的对象。