2016-06-29 1 views
4

Это вопрос, прямолинейный.По умолчанию, DispatchQueue .serial или .concurrent?

let serial = DispatchQueue(label: "serial", attributes: .serial) 
let concurrent = DispatchQueue(label: "concurrent", attributes: .concurrent) 
let q = DispatchQueue(label: "q") 

Я вижу никакой собственности я не могу осмотреть на q, что скажет мне.

Запуск на детской площадке с PlaygroundPage.current.needsIndefiniteExecution = true показывает серийное поведение, но я не хочу полагаться на детскую площадку (вроде janky с асинхронным материалом) или недокументированное поведение.

Может ли кто-нибудь предложить жесткий ответ со ссылкой на документацию?

ответ

5

Перед тем, как Swift 3, тип очереди отправки по умолчанию был последовательным - passing nil into the attributes parameter из dispatch_queue_create дал бы очередную очередь, и я не вижу причины для изменения типа очереди по умолчанию. Хотя, к сожалению, я не могу найти документацию по DispatchQueue, которая может подтвердить это.

Однако looking at the source code показывает, что это на самом деле до сих пор так:

public convenience init(
    label: String, 
    attributes: DispatchQueueAttributes = .serial, 
    target: DispatchQueue? = nil) 
{ 
    ... 
} 

Хотя я всегда предпочитаю, чтобы указать атрибут в явном виде, чтобы сделать мой код более понятным и предотвращения такого рода путаницы.

+0

Ссылка на исходный код была потрясающей, спасибо. Я не видел реализацию param по умолчанию, когда я smd + нажал на имя метода в xcode. – SimplGy

+0

@SimplGy Счастлив помочь :) – Hamish