Почему AppDelegate наследуется от UIResponder?
Я заметил, что при создании нового проекта с использованием шаблона iPhone-Detail в Xcode 4.2 beta 4 он выполняет следующие действия:
// AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>
Почему AppDelegate
наследует от UIResponder
вместо NSObject
?
Ответы
Ответ 1
Из Преобразование в примечания к выпуску раскадровки:
Примечание. В текущих шаблонах Xcode класс делегирования приложения наследуется от UIResponder. Это значит, что экземпляр делегата может участвовать в цепочке ответчиков и поэтому обрабатывать действия на уровне приложения. Если вы не использовали этот шаблон в существующем приложении, нет необходимости его использовать для раскадровки.
Ответ 2
Проверьте документацию UIResponder
. Поскольку AppDelegate может реагировать на события касания, он реализует интерфейс UIResponder
.
Ответ 3
Я бы предположил, что он имеет доступ к глобальному менеджеру отмены.
Ответ 4
UIResponder
является базовым классом для UIKit framework. UIResponder
может обрабатывать события.
Ваш класс AppDelegate
- это класс делегата для UIApplication
, который UIApplicationMain
. AppDelegate
соответствует протоколу UIApplicationDelegate
.
В классе UIResponder
есть методы, чтобы получить окно фокуса приложения, на котором будут заполнены все представления, поэтому у вас должен быть класс, который наследует от UIResponder
, чтобы сделать окно ключевым.
Ответ 5
AppDelegate наследует от UIResponder
, который обрабатывает события iOS. Класс UIResponder
определяет интерфейс для объектов, которые реагируют на события и обрабатывают события.
Ответ 6
ОБНОВЛЕНИЕ: Мой ответ ниже может быть неправильным. Я просто просматривал изображение в документации iOS. Но он должен быть устаревшим.
Если в iOS 5 нет ничего нового и еще не задокументировано, я думаю, что это опечатка с этим шаблоном Xcode 4.2 beta 4. В приложении iOS делегат приложения должен иметь подкласс NSObject
, а не UIResponder
, например:
@interface AppDelegate : NSObject <UIApplicationDelegate>
Для UIApplication - последний ответчик в цепочке ответчиков.
Для приложений Mac OS X в наборе приложений (для Cocoa, например, Mac) делегат приложения является последним ответчиком в цепочке ответчиков.