我是NSoperation
的新手。 NSoperation
是一个单身对象。
我们如何通过NSoperation
同时实现多项操作?
是否可以不使用NSoperationQueue
?
即使我们使用NSoperationQueue,它也会执行操作FIFO格式。它会如何并发执行?
答案 0 :(得分:2)
如果要实现并发操作 - 即与调用线程异步运行的操作 - 必须编写其他代码以异步启动操作。例如,您可能会生成一个单独的线程,调用异步系统函数或执行任何其他操作以确保start方法启动任务并立即返回,并且很可能在任务完成之前返回。
大多数开发人员永远不需要实现并发操作对象。 如果始终将操作添加到操作队列,则无需实现并发操作。当您向操作队列提交非并发操作时,队列本身会创建一个运行操作的线程。因此,向操作队列添加非并发操作仍会导致操作对象代码的异步执行。只有在需要异步执行操作而不将其添加到操作队列的情况下,才需要定义并发操作。
请参阅Concurrency Programming Guide - section Concurrent Versus Non-concurrent Operations
另请阅读Managing Concurrency with NSOperation
您通常通过将操作添加到操作队列(NSOperationQueue类的实例)来执行操作。
NSOperationQueue 类调节一组NSOperation对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。 队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。应用程序可以创建多个操作队列并向其中任何一个提交操作。
操作队列直接执行其操作,在辅助线程上运行它们,或间接使用libdispatch库执行
您可以阅读有关NSOperation here的更多信息,并详细了解NSOperationQueue here