2016-03-02 132 views
2

请参阅WWDC的视频https://developer.apple.com/videos/play/wwdc2015/226/ 演讲者表明我们可以在两个相同类型的NSopeation实例之间添加依赖关系。示例显示警报的NS操作。通过实现这一点,我们可以确保我们不会同时抛出多个警报并且惹恼用户。 如果一个警报已经显示下一个警报将等待。使NSOperations互斥

我仍然不知道如何实现NSOperations跨队列的这种依赖关系。更简单的话,任何人都可以展示以下两件事的示例(实现)。

从队列1.

添加相同的NSOperation类型的多个实例的依赖关系的2.Implementation上操作的从队列2加法操作B的依赖性,即使它们在不同的队列的1.Implementation。例如:如果我将“AlertOperation”的多个实例添加到不同的队列中,我想确保它们仍然在他们自己之间依次发生。

如果实例在目标C中,我将不胜感激。 如果需要,请索取更多解释。

+0

解释你的不同队列是什么。他们如何以及何时创建和添加操作? – Wain

+0

队列的目的可以是任何东西。关键是,在我上面提到的WWDC视频中说,我可以在不同的队列中提醒操作,并使它们彼此依赖。现在,如果来自队列1的警报操作已经显示警报,那么我希望队列2中的警报操作等待显示,直到第一次警报操作结束(即警报被解除)。这将确保当用户已经在他正在看的屏幕上有一个警报时,我不会弹出另一个警报。 –

+0

,我假设在它们之间添加依赖关系给你一些问题,当你尝试它时? – Wain

回答

7

我是提交该会话的工程师。

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

随会话提供的示例代码使用全局表来跟踪所有当前正在执行的操作。 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”)作为执行操作的东西。

+0

Kudos!我正在实施类似的过程。但不知道这是否是最好的方法。谢谢戴夫。 –

+1

我们是否可以希望今年的后续会议能够展示不错的技术,可以在不使用临时文件的情况下将数据从一个NSOperation传递到另一个NSOperation? – Mindaugas

+0

@Mindaugas,如果您有权访问论坛,我可以在这里找到来自Apple开发人员的好回复:[https://forums.developer.apple.com/thread/25761](https://forums.developer.apple。 COM /线程/ 25761) –

0

从意见,基本问题是:

我怎么能添加一个依赖于现有的操作时,我没有对它的引用

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

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

+0

我们在这里稍微离题了一点。我的问题仍然是上述主要问题主体中的两点。 –

+0

这回答了这些问题,您需要将操作分组到特定队列中,以便您可以找到它们,或者您需要搜索队列上的操作以找到正确的操作 – Wain