I noticed that when creating a new project with the iPhone Master-Detail template in Xcode 4.2 beta 4, it does:
// AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>
Why does AppDelegate
inherit from UIResponder
instead of NSObject
?
I would guess it is so it has access to the global undo manager.
UIResponder
is the base class for the UIKit framework.UIResponder
can deal with the events.Your
AppDelegate
class is the delegate class for theUIApplication
whichUIApplicationMain
creates.AppDelegate
conforms to theUIApplicationDelegate
protocol.The
UIResponder
class has the methods to get the window of the application focus on which all the views will be populated, so you should have a class that inherits fromUIResponder
in order to make the window as key.UPDATE: My answer below might be wrong. I was just going by the image in the iOS documentation. But, it must be outdated.
Unless there's something new in iOS 5 and not yet documented, then I think this is a typo with this Xcode 4.2 beta 4 template. In an iOS app, the app delegate should subclass
NSObject
, notUIResponder
, e.g.:For iOS apps, in UIKit (for Cocoa Touch, e.g., iPhone & iPad),
UIApplication
is the last responder in the responder chain.For Mac OS X apps, in the Application Kit (for Cocoa, e.g., Mac), the app delegate is the last responder in the responder chain.
From Converting to Storyboards Release Notes:
AppDelegate inherits from
UIResponder
that handles iOS events. TheUIResponder
class defines an interface for objects that respond to and handle events.Check the documentation of
UIResponder
. Since AppDelegate can respond to touch events, it implements theUIResponder
interface.