Я пытаюсь создать (сетевой) синхронизированный массив для компании, в которой я работаю. Хотя сетевая часть работает нормально, я остановился на проблеме.
Мое желание состояло в том, чтобы создать новую очередь с помощью dispatch_create_queue
, к которой я бы добавил два блока, которые не для запуска в основном потоке, но последовательно, что означает, что сначала первый блок должен работать, затем второй и никогда не параллельно.
Я прочитал документацию на яблоко, но это смущает, если не сказать больше.
-
Когда я создаю свою очередь с помощью
dispatch_queue_create
, а затем добавляю блоки (после их определения) с помощьюdispatch_sync
, я обнаружил, что блок по-прежнему выполняется в основном потоке. -
При использовании
dispatch_async
, если блоки не выполняются в основном потоке. -
Когда я пытаюсь добавить оба блока с помощью
dispatch_sync
, они блокируются навсегда. -
Единственный раз, когда оба блока, кажется, работают нормально, а основной поток - при вызове
dispatch_async
.
Однако причина, по которой я выбрал GCD и метод синхронизации, чтобы у меня создалось впечатление, что я создаю новую очередь (и, следовательно, новый поток), и что добавление блоков в эту очередь будет просто блокировать одну, пока другая законченное исполнение. Это не так, или создание очереди не гарантирует, что код не будет работать в основном потоке?