将主队列设置为NSOperationQueue的基础队列

时间:2016-08-21 20:58:07

标签: ios swift nsoperation nsoperationqueue

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不会引发任何错误,也不会产生任何不需要的行为。这背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

可能有很多原因;一旦发生死锁的可能性,你需要向Apple寻求明确的答案。

如果您的整个操作必须在主队列上执行,那么您可以使用NSOperationQueue.mainQueue获取与主线程关联的操作队列。如果只需要在主队列上执行部分操作(例如更新UI元素),那么您可以根据需要同步或异步地将该操作分派到主队列中。