使NSOperations互斥

时间:2016-03-02 07:18:22

标签: ios nsoperation nsoperationqueue

从WWDC https://developer.apple.com/videos/play/wwdc2015/226/推荐此视频 发言者表明我们可以在两个相同类型的NSopeation实例之间添加依赖关系。示例显示警报的NS操作。通过实现这一点,我们可以确保我们不会同时抛出多个警报并使用户烦恼。 如果下一个警报已经显示,则会等待。

我仍然无法弄清楚如何实现NSOperations交叉队列的这种依赖关系。在更简单的单词中,任何人都可以展示以下两件事的示例(实现)。

1.在队列1的操作A上添加操作B从队列2的依赖性的实现。

2.实现添加相同NSOperation类型的多个实例的依赖关系,即使它们位于不同的队列中。示例:如果我将“AlertOperation”的多个实例添加到不同的队列,我想确保它们之间仍然按顺序进行。

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

2 个答案:

答案 0 :(得分:8)

我是介绍该会话的工程师。

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

会话提供的示例代码使用全局表来跟踪所有当前正在执行的操作。 When a new operation comes in that specifies it should be mutually exclusive与其他同类型的操作the code looks up in the table for the other operations of the same kind。然后,新操作取决于列表中的最后一个操作。

由于该表是一个全局表,因此无论操作实际执行哪个队列,它都可以工作。它唯一需要的是使用自定义NSOperationQueue子类(" OperationQueue")作为执行操作的东西。

答案 1 :(得分:0)

根据评论,基本问题是:

  

如果我没有对其进行引用,如何为现有操作添加依赖

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

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