Ответ 1
В общем, делегаты можно рассматривать как обработчики событий. Соответственно, AppDelegate является основным обработчиком событий для всего вашего приложения. Сообщается, когда приложение запустилось, когда оно выйдет, когда приходит уведомление Push, когда приложение перешло в фоновый режим и т.д. Одно из этих событий - applicationDidFinishLaunching - обычно отвечает за создание окна приложения и добавление просмотров к этому окну.
В большинстве приложений представление, добавленное в окно, фактически контролируется UIViewController. Каждый UIViewController отвечает за управление появлением одного основного представления плюс все его подпункты. Например, UITableViewController отвечает за управление UITableView (основной вид) и все UITableViewCells (subview), которые вставляются в этот UITableView. UIViewController обычно выступает в роли делегата (обработчика событий) в представлениях, за которые он отвечает. Когда пользователь удаляет ячейку представления таблицы, вызывается метод в UITableViewController. Когда пользователь перебирает, чтобы удалить отдельный метод, вызывается.
Общий UIViewController предоставляет те же основные функции, но для пользовательских представлений. Например, UIViewController может нести ответственность за отображение нескольких текстовых представлений и кнопки. UIViewController создаст свой основной вид, текстовые представления и представление кнопки. Текстовые представления и представление кнопок будут добавлены в основной вид контроллера представления в виде подзонов. UIViewController зарегистрировался бы как делегат для событий из текстового представления (например, узнав, когда пользователь закончил редактирование текста в текстовом представлении). Он также зарегистрировал бы метод обработки нажатия кнопки, исходящего от кнопки, которой он владел. Когда происходит какое-либо из этих зарегистрированных событий, методы на UIViewController вызываются, позволяя вам выполнять любые действия.
rootViewController - это определенный тип контроллера представлений, используемый с навигационными контроллерами. Если вы хотите, чтобы приложение, имеющее типичную иерархию представления навигации iOS, ваш AppDelegate обычно добавлял в окно приложения UINavigationController. Этот UINavigationController бесполезен без фактического отображения содержимого. Именно здесь запускается rootViewController. Вы несете ответственность за предоставление контроллера вида (например, описанного выше), чтобы действовать как первое представление, хранящееся в стеке представлений UINavigationController. Это представление будет отображаться при запуске приложения и в любое время, когда пользователь выталкивает последующие ViewControllers из стека UINavigationController.
Долгое время я понимаю, но надеюсь, что это поможет.