从NSOperationQueue运行的NSOperation是什么意思?

ami*_*mit 6 nsoperation nsoperationqueue ios

因为NSOperationQueue总是在新线程上运行任务,所以我对运行isConcurrent时的角色感到困惑.NSOperationNSOperationQueue

如果我有两个子类NSOperation,都运行一个异步过程,无论是从推出NSOperationQueue并在这两个我重写isCancelled,isExecuting,isFinished和isReady.如果在一个我覆盖isConcurrent总是return YES和另一个总是如此,将会有什么不同return NO.

谁真的打电话isConcurrent?如何逻辑的变化,如果它是NO或YES.

Gab*_*lla 5

这是一种遗留方法,在OS X v10.6之前和iOS 4之前使用,即在引入GCD进行NSOperationQueue调度之前使用.

来自doc

操作队列通常提供用于运行其操作的线程.在OS X v10.6及更高版本中,操作队列使用libdispatch库(也称为Grand Central Dispatch)来启动其操作的执行.因此,无论是将它们指定为并发还是非并发操作,操作始终在单独的线程上执行.但是,在OS X v10.5中,只有在isConcurrent方法返回时,才会在单独的线程上执行操作NO.如果该方法返回YES,则操作对象应该创建自己的线程(或者启动一些异步操作); 队列没有为它提供线程.

如果您运行的是OS X> = 10.6或iOS> = 4,则可以放心地忽略它.

作为对这一事实的证实,来自博士 isConcurrent

在OS X v10.6及更高版本中,操作队列忽略此方法返回的值,并始终在单独的线程上启动操作.