<分区>
我是 NSoperation
的新手。 NSoperation
是一个单发对象。
如何通过
NSoperation
实现多个操作的并发?没有
NSoperationQueue
是否可行?即使我们使用 NSoperationQueue,它也会执行 FIFO 格式的操作。它如何并发执行?
<分区>
我是 NSoperation
的新手。 NSoperation
是一个单发对象。
如何通过NSoperation
实现多个操作的并发?
没有NSoperationQueue
是否可行?
即使我们使用 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/