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
中看到的,不应将其用作基础队列。