Правильный дизайн не имеет VC, наблюдающих за сетевыми клиентами напрямую. Эти сетевые операции должны быть сборкой частей модели , что действительно важно для VC. Пусть VC соблюдает эту единственную модель.
Он может делать это, наблюдая, используя один из хорошо известных шаблонов для слабосвязанной связи между объектами. ОП правильно упоминает делегатов. Центр уведомлений и КВО другие. На SO много дискуссий о том, что использовать и как реализовать. (Я бы назвал NSNotificationCenter
простым и рациональным началом).
Таким образом, порядок работы такой:
- выделяем модель
- запуск сетевых запросов и настройка этих завершений запросов (вероятно, блоков завершения) для обновления этой модели своими ответами. (модель может запускать запросы, что является разумной практикой).
- создать контроллеры представления, которые настраивают наблюдение модели при их инициализации (возможно, в
viewWillAppear
или позже)
А как насчет того, что> 1 запрос находится в полете одновременно? Приведенный выше комментарий правильно указывает, что GCD предлагает способ сгруппировать эти асинхронные операции в одну. Но вы можете сделать это сами: модель решит, когда она будет полностью построена. Код завершения для каждого запроса изменит некоторое условие в модели на состояние «готово». Каждое завершение запроса может проверять, соблюдены ли все условий готовности, и только затем отправлять «готовое» уведомление для просмотра наблюдателями.
Еще одна проблема: что если все эти запросы выполняются очень, очень быстро? Может быть, есть какой-то кешированный ответ, который готов на ранней стадии, что делает модель «готовой» до того, как у ВК будет возможность настроить наблюдение? Обработайте это прямо в VC: перед наблюдением модели проверьте, готова ли она уже, и запустите тот же код обновления, который выполняется в уведомлении.