我想使用NSOperationQueue设置一个序列化的任务队列,但我对文档中讨论的术语感到有些困惑。
在NSOperation的背景下 对象,术语并发和 非并发不一定 指的是并行执行 线程。相反,非并发 操作是使用执行的操作 提供的环境 它是一个并发操作 负责建立自己的 执行环境。
设置“自己的执行环境”意味着什么?
我的NSOperation派生任务需要按照添加到队列的顺序连续执行。
所以我认为这意味着'非并发'操作,所以我为需要完成的工作实现'main',并为'isConcurrent'返回NO。此外,NSOperationQueue的'setMaxConcurrentOperationCount'将设置为1.
我没有在这些任务之间设置NSOperation依赖性的原因是因为它们插入队列的顺序是它们应该完成的顺序。
这些假设是否正确?
答案 0 :(得分:25)
NSOperationQueue
总是同时执行操作,同时考虑依赖关系。
“非并发”操作需要单独的线程才能并发执行。 NSOperationQueue
负责提供此线程。换句话说,非并发操作取决于NSOperationQueue
以使其成为并发操作。
“并发”操作本身是并发的;它不需要NSOperationQueue
来为它创建一个线程。一个例子是使用异步文件IO的操作。
如果您希望串行执行两个或更多操作,则需要使用依赖项。
如果您希望操作阻止主线程,请不要使用NSOperationQueue
;只需在主线程上一个接一个地运行每个操作。
要手动设置最大并发操作,请在operationQueue setMaxConcurrentOperationCount:
答案 1 :(得分:1)
你真的需要继承NSOperation
吗?为什么不使用NSInvocationOperation
及其addDependency:
方法?
在this SO question中查看我的回答。