Я думаю, что передача MOC вокруг ваших контроллеров представления, как вы сказали в своем вопросе, является хорошим подходом. Идея шаблона MVC заключается в том, что контроллеры представлений заботятся о бизнес-логике, поэтому в таком случае, если вы передадите ему MOC (который в конце модели), вы дадите второму контроллеру представления возможность выполнять свою собственную бизнес-логику. независимо от любого другого контроллера представления.
Вместо этого, если вы решили выполнить запрос на первом контроллере представления, а затем передать результат второму контроллеру представления и, наконец, передать обратно первому контроллеру представления изменения, произошедшие во втором, вы добавляете дополнительную сложность к Первый контроллер представления, кроме того, что вы добавляете двунаправленную связь между двумя контроллерами представления (так что любое изменение в одном VC потребует изменений к другому!) и, наконец, вы сводите второй контроллер представления в основном к представлению с некоторой функциональностью, но без взаимодействия модели.
Наконец, вы можете использовать, как предложено в другом посте, синглтон, который заботится обо всех взаимодействиях MOC. Но, на мой взгляд, при таком подходе вы добавляете дополнительный уровень управления поверх существующего уровня управления, который представлен MOC. Этот подход имеет смысл, когда вы хотите избавиться от всего, что связано с бизнес-логикой в ваших контроллерах представления, но обычно это желательно, когда есть много сложных действий, которые должны совместно использоваться несколькими контроллерами представления: но в таком случае, вероятно, пришло время подумать о другой организации вашего приложения.
Наконец мой ответ на ваш бонусный вопрос: вам не нужно выпускать контроллер представления, не делайте этого! Пока он не находится внутри контроллера навигации и вы не отпустите контроллер навигации, ваш контроллер представления защищен от освобождения.