Ale*_*ove 16 iphone cocoa multithreading cocoa-touch objective-c
我想使用NSOperationQueue设置一个序列化的任务队列,但我对文档中讨论的术语有点困惑.
在NSOperation对象的上下文中,术语并发和非并发不一定是指线程的并行执行.相反,非并发操作是使用为其提供的环境执行的操作,而并发操作负责设置其自己的执行环境.
设置"自己的执行环境"意味着什么?
我的NSOperation派生任务需要按照它们添加到队列的顺序执行.
所以我认为这意味着"非并发"操作,因此我为需要完成的工作实现'main',并为'isConcurrent'返回NO.此外,NSOperationQueue的'setMaxConcurrentOperationCount'将设置为1.
我没有在这些任务之间设置NSOperation依赖性的原因是因为它们插入队列的顺序是它们应该完成的顺序.
这些假设是否正确?
Dar*_*ren 25
NSOperationQueue 始终同时执行操作,同时考虑依赖关系.
"非并发"操作需要单独的线程才能同时执行. NSOperationQueue负责提供这个帖子.换句话说,非并发操作依赖于NSOperationQueue使其成为并发操作.
"并发"操作本身是并发的; 它不需要NSOperationQueue为它创建一个线程.一个例子是使用异步文件IO的操作.
如果您希望串行执行两个或更多操作,则需要使用依赖项.
如果你想要一个操作阻止主线程,那么不要使用NSOperationQueue; 只需在主线程上一个接一个地运行每个操作.
要手动设置最大并发操作,请在operationQueue上使用方法 setMaxConcurrentOperationCount: