Это примерно то же самое, что и:
dispatch_sync(someConcurrentQueue, ^(){
for (size_t i = 0; i < 5; ++i){
dispatch_async(someConcurrentQueue, ^(){
// do some non-thread safe operation
});
}
});
Операции будут поставлены в очередь в той же очереди, для которой поток, в котором будет выполняться код, является более подробным описанием реализации.Таким образом, если бы вы сделали это в бесконечном цикле, это выглядело бы примерно так:
- sync
- async (0)
- async (1)
- async (2)
- async (3)
- async (4)
- синхронизация
- ...
Поскольку ваши следующие dispatch_sync
будут выполнены после того, как dispatch_apply
было запланировано (не выполнено), ваша очередь очень быстро увеличится в размере.