如何通过NSOperation来实现并发任务?

我是NSoperationNSoperation是一个单选对象。

  1. 我们怎样才能通过NSoperation操作同时实现多个操作?

  2. 是否有可能没有NSoperationQueue

  3. 即使我们使用NSoperationQueue,它也会执行操作FIFO格式。它将如何同时执行?

如果你想要实现一个并发操作 – 即相对于调用线程asynchronous运行的操作 – 你必须编写额外的代码来asynchronous启动操作。 例如,您可能会产生一个单独的线程,调用一个asynchronous系统函数或者执行其他任何操作来确保start方法启动任务并立即返回,并且很可能在任务完成之前返回。

大多数开发人员不应该需要实现并发操作对象。 如果您始终将操作添加到操作队列中,则不需要执行并发操作。 当您向操作队列提交非并发操作时,队列本身会创build一个线程来运行您的操作 。 因此,向操作队列中添加非并发操作仍会导致操作对象代码的asynchronous执行。 只有在需要asynchronous执行操作而不将其添加到操作队列的情况下,才能定义并发操作。

请参阅“ 并发编程指南” – “并行与非并行操作”一节

另请阅读使用NSOperationpipe理并发

您通常通过将操作添加到操作队列 (NSOperationQueue类的一个实例)来执行操作。

NSOperationQueue类调节一组NSOperation对象的执行。 在被添加到队列之后,操作将保留在该队列中,直到被明确取消或完成其任务。 队列中的操作(但尚未执行)本身按照优先级和操作间对象依赖关系进行组织,并相应执行 。 应用程序可能会创build多个操作队列并将操作提交给其中的任何一个。

操作队列直接执行操作,通过在辅助线程上运行它们或间接使用libdispatch库来执行操作

你可以在这里阅读更多关于NSOperation的内容, 并在这里阅读更多关于NSOperationQueue的内容