Смущает выполнение цикла и методы обратного вызова делегата
Я пытаюсь узнать, как работают циклы выполнения в iOS. Рассмотрим следующий пример: Вы запускаете сетевой запрос асинхронно и регистрируете себя в качестве делегата запроса.
Таким образом, когда данные поступают из соединения, будут выполняться методы обратного вызова в вашем классе.
Как именно это синхронизировано? Например, если вы добавляете входящие данные в структуру данных по мере их поступления, что мешает функции обратного вызова прерваться другим вызовом к себе, когда поступает больше данных, что приводит к повреждению структуры данных?
Сериализует ли цикл выполнения операции так, что каждая функция обратного вызова должна выполняться до завершения, прежде чем может начаться другая? Во всех сетевых примерах, которые я нашел в сети, нет ссылок на какие-либо типы абстракций синхронизации (например, блокировки), и эти примеры также не используют GCD.