Ios 将主队列设置为NSOperationQueue的基础队列
Ios 将主队列设置为NSOperationQueue的基础队列,ios,swift,nsoperation,nsoperationqueue,Ios,Swift,Nsoperation,Nsoperationqueue,NSOperationQueue类有一个underyingqueue属性,用于设置将在其上执行NSOperation实例的调度队列 let dispatchQueue = dispatch_queue_create("custom.queue", DISPATCH_QUEUE_SERIAL) let opQueue = NSOperationQueue() opQueue.underlyingQueue = dispatchQueue 然而,官方文件指出: 此属性的值不能是dispatch\u
NSOperationQueue
类有一个underyingqueue
属性,用于设置将在其上执行NSOperation
实例的调度队列
let dispatchQueue = dispatch_queue_create("custom.queue", DISPATCH_QUEUE_SERIAL)
let opQueue = NSOperationQueue()
opQueue.underlyingQueue = dispatchQueue
然而,官方文件指出:
此属性的值不能是dispatch\u get\u main\u queue返回的值
苹果似乎没有更多关于这个问题的解释。但是,将主队列用作
underyingqueue
不会引发任何错误,也不会产生任何不必要的行为。这背后的原因是什么?可能有很多原因;死锁的可能性在脑海中浮现,但你需要向苹果寻求明确的答案
如果整个操作必须在主队列上执行,则可以使用
NSOperationQueue.mainQueue
获取与主线程关联的操作队列。如果只需要在主队列上执行部分操作(例如更新UI元素),则可以根据需要同步或异步地将该操作分派到主队列上 如果要使用主队列,为什么要调用dispatch\u queue\u create
?只需使用dispatch\u get\u main\u queue
,dispatch\u queue\u create
仅作为如何设置underyingqueue
属性的示例。正如您从文档dispatch\u get\u main\u queue
中看到的,不应将其用作基础队列。