Ответ 1
В Cocoa делегат - это объект, который другой объект защищает по вопросам поведения и информирует об изменениях в его состоянии. Например, UITableViewDelegate отвечает за ответы на вопросы о том, как UITableView должен вести себя при создании выборов или переупорядочивать строки. Это объект, который UITableView запрашивает, когда он хочет знать, насколько высокой должна быть определенная строка. В парадигме Model-View-Controller делегаты являются контроллерами, а имена многих делегатов заканчиваются на "Controller".
С риском указания очевидного, UIApplicationDelegate является делегатом для UIApplication. Эта связь немного более очевидна в Cocoa (Mac), чем в Cocoa Touch (iPhone), поскольку делегат NSApplication может более непосредственно контролировать поведение NSApplication (например, предотвращение завершения приложения). iPhone не позволяет много контролировать UIApplication, поэтому в основном UIApplicationDelegate информируется об изменениях, а не о принятии активного процесса принятия решений.
UIApplicationDelegate не является строго доступным со всего мира в приложении. Singleton UIApplication - это [UIApplication sharedApplication]), и через него вы можете найти его делегата. Но это не означает, что для каждого объекта в приложении он должен напрямую разговаривать с делегатом приложения. В общем, я отговариваю разработчиков от случайных объектов разговаривать с делегатом приложения. Большинство проблем, которые решаются таким образом, лучше решаются с помощью синглтонов, NSNotification или других объектов-делегатов.
Что касается его создания, то на Mac нет ничего волшебного в делетете приложения. Это просто объект, созданный и подключенный NIB в большинстве случаев. Однако на iPhone делегат приложения может быть немного магическим, если он создан экземпляром UIApplicationMain(). Четвертый параметр - это NSString, указывающий класс делегата приложения, а UIApplicationMain() создаст его и установит его как делегата sharedApplication. Это позволяет вам установить делегат без NIB (что-то очень сложно на Mac). Если четвертый параметр для UIApplicationMain() равен nil (как и в шаблонах Apple), то делегат создается и подключается основным NIB, как и главное окно.