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

标签 iphone ios ipad grand-central-dispatch nsthread

<分区>

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

  1. 如何通过NSoperation实现多个操作的并发?

  2. 没有NSoperationQueue是否可行?

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

最佳答案

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

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

参见 Concurrency Programming Guide - section Concurrent Versus Non-concurrent Operations

另请阅读Managing Concurrency with NSOperation

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

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

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

您可以阅读更多关于 NSOperation here 的信息并阅读更多关于 NSOperationQueue here 的信息

关于iphone - 如何通过NSOperation实现并发任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910479/

相关文章:

iphone - iPhone向后播放caf音频

iPhone 加速计改变灵敏度 - Cocoa Touch

ios - respondsToSelector 到 id 类型对象

iphone - 启动 iOS 模拟器时 XCode 锁定

iphone - 旋转 MKMapView 的内容

iphone - 如何在 MKMapView 上添加按钮?

ios - 结合导航 Controller 和标签栏 Controller

iphone - 使用 NSUserDefaults 保存 NSMutableArray 不起作用

ios - 在 iPhone 中使用 Tesseract OCR 从驾驶执照中读取数据

ipad - 通过尺寸类别区分纵向和横向 iPad 的区别