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

时间:2012-10-16 08:28:12

标签: iphone ios ipad grand-central-dispatch nsthread

我是NSoperation的新手。 NSoperation是一个单身对象。

  1. 我们如何通过NSoperation同时实现多项操作?

  2. 是否可以不使用NSoperationQueue

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

1 个答案:

答案 0 :(得分:2)

如果要实现并发操作 - 即与调用线程异步运行的操作 - 必须编写其他代码以异步启动操作。例如,您可能会生成一个单独的线程,调用异步系统函数或执行任何其他操作以确保start方法启动任务并立即返回,并且很可能在任务完成之前返回。

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

请参阅Concurrency Programming Guide - section Concurrent Versus Non-concurrent Operations

另请阅读Managing Concurrency with NSOperation

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

NSOperationQueue 类调节一组NSOperation对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。 队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。应用程序可以创建多个操作队列并向其中任何一个提交操作。

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

您可以阅读有关NSOperation here的更多信息,并详细了解NSOperationQueue here