NSOperationQueue
类有一个underlyingQueue
属性,用于设置将在其上执行NSOperation
个实例的调度队列。
let dispatchQueue = dispatch_queue_create("custom.queue", DISPATCH_QUEUE_SERIAL)
let opQueue = NSOperationQueue()
opQueue.underlyingQueue = dispatchQueue
然而,官方文件指出:
此属性的值不能是
返回的值dispatch_get_main_queue
Apple似乎没有更多关于此主题的解释。但是,将主队列用作underlyingQueue
不会引发任何错误,也不会产生任何不需要的行为。这背后的原因是什么?
答案 0 :(得分:2)
可能有很多原因;一旦发生死锁的可能性,你需要向Apple寻求明确的答案。
如果您的整个操作必须在主队列上执行,那么您可以使用NSOperationQueue.mainQueue
获取与主线程关联的操作队列。如果只需要在主队列上执行部分操作(例如更新UI元素),那么您可以根据需要同步或异步地将该操作分派到主队列中。