Если вам нужно два viewcontrollers в знаете друг о друге, у вас проблема архитектуры.
Как правило, ваш VC обрабатывает только визуальные/пользовательские интерфейсы, такие как анимация или касания кнопок. Эти вещи, очевидно, не нуждаются в выходе из VC (VC2 не заботится о том, что VC1 имеет затухающую анимацию или 3 кнопки).
Когда дело доходит до отображения данных, данные поступают из внешнего класса/службы/менеджера; люди называют это много разных вещей.
Но хорошая новость заключается в том, что если этот «сервис» находится вне вашего контроллера, вы можете использовать его из любого места.
Из VC1 вы можете сделать myService.GetListOfMessages();
(например), и ничто не мешает вам делать это из другого класса, используя ту же самую услугу. Теперь вы можете получить доступ к списку сообщений от VC1, VC2 или где угодно.
Имейте в виду, что в целом ваш VC не должен делать ничего, что не связано с визуальными эффектами. Если вы выполняете вызовы webservice, бизнес-логику или что-то в этом роде, она принадлежит другому классу. Таким образом, он организован (что должно быть достаточно само по себе), но также, если ваши визуальные изменения меняются или вам нужна одна и та же логика где-то еще, вы уже готовы к классу.
Это не полный пример, но если вам достаточно удобно программировать, вы должны просто прекрасно это реализовать.
Только будьте осторожны:
- Не злоупотребляйте одиночек, или хуже, статика.
- Не забывайте об одной ответственности (не запихивайте все в одном классе).
- Не делайте вызовы webservice, которые не нужны. Если это данные, которые вы используете много, просто сохраните их в памяти.
Учитывая все это, вы должны быть в порядке, и ваши контроллеры фактически будут обрабатывать меньше работы, сохраняя при этом доступ к необходимым им данным.