2016-08-21 2 views
4

NSOperationQueue класс имеет свойство underlyingQueue, которое используется для установки очереди отправки, на которой будут выполняться экземпляры NSOperation.Установка основной очереди в качестве базовой очереди для NSOperationQueue

let dispatchQueue = dispatch_queue_create("custom.queue", DISPATCH_QUEUE_SERIAL) 
let opQueue = NSOperationQueue() 
opQueue.underlyingQueue = dispatchQueue 

Однако официальная документация гласит:

Значение этого свойства не должно быть значение, возвращенное dispatch_get_main_queue

Кажется, что нет больше объяснений по этому вопросу от Apple. Однако использование основной очереди как underlyingQueue не вызывает никаких ошибок и не приводит к нежелательному поведению. Каковы причины этого?

+0

Если вы хотите использовать основную очередь, зачем вызывать 'dispatch_queue_create'? Просто используйте 'dispatch_get_main_queue'. – rmaddy

+0

'dispatch_queue_create' используется только как пример того, как установить свойство' basicQueue'. Как видно из документации, 'dispatch_get_main_queue' не следует использовать в качестве базовой очереди. –

ответ

2

Может быть несколько причин; потенциал для взаимоблокировок возникает, как один, но вам нужно будет попросить Apple дать окончательный ответ.

Если вся ваша операция должна быть отключена в основной очереди, вы можете получить очередь операций, связанную с основным потоком, с помощью NSOperationQueue.mainQueue. Если только часть вашей операции должна выполняться в основной очереди (например, обновление элементов пользовательского интерфейса), вы можете просто отправить эту операцию в основную очередь либо синхронно, либо асинхронно по мере необходимости.