Крис уже дал отличный ответ, но я хотел бы добавить пару моментов, чтобы ответить на конкретные вопросы.
Приложения для iOS обычно имеют только одно окно UIWindow. В этом окне вы можете представить несколько видов.
Приложения обычно организованы в несколько логических экранов, каждый из которых управляется некоторым подклассом UIViewController.
Каждый экземпляр UIViewController имеет корневое представление, которое может содержать много подпредставлений. Предполагается, что представление UIViewController будет заполнять его окно или какой-либо кадр, предоставленный одним из классов контроллеров представления контейнера Apple (UINavigationController, UITabBarController, UISplitViewController и т. Д.). Вы не должны добавлять один вид UIViewController как подпредставление другого представления UIViewController.
UIViewControllers будет пытаться выгрузить свои представления, когда приложение получит предупреждение памяти, если представление не видно. Смотрите методы класса жизненного цикла, такие как -viewDidUnload
. Вы должны поддерживать и использовать это поведение, чтобы уменьшить объем используемой памяти. Хранение UIViewControllers в памяти без загрузки их представлений должно иметь минимальные накладные расходы, позволяет сохранять некоторое постоянное состояние, и представление каждого контроллера может быть перезагружено при необходимости.
Обычно для перехода между представлениями элемент управления отправляет сообщение текущему контроллеру представления (часто через привязку IBAction). Затем текущий контроллер инициирует переход к другому контроллеру представления. Это можно сделать, создав новый контроллер представления и поместив его на текущий контроллер навигации или представив новый контроллер как модальный. Это может иметь ссылку на какой-то существующий контроллер и представить это. Он может удалить себя из стека навигации, чтобы показать предыдущий контроллер. Он может даже передавать сообщение вверх по иерархии контроллера, пока какой-либо родитель не переключит видимую вкладку, не отклонит или не представит модальное и т. Д.
Вы также можете запускать меньшие переходы, отвечая на IBAction, добавляя, удаляя, скрывая или перемещая подпредставления корневого представления UIViewController.