为啥 AppDelegate 继承自 UIResponder?

Posted

技术标签:

【中文标题】为啥 AppDelegate 继承自 UIResponder?【英文标题】:Why does AppDelegate inherit from UIResponder?为什么 AppDelegate 继承自 UIResponder? 【发布时间】:2011-08-01 00:16:51 【问题描述】:

我注意到,在 Xcode 4.2 beta 4 中使用 iPhone Master-Detail 模板创建新项目时,它会:

// AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

为什么AppDelegate 继承自UIResponder 而不是NSObject

【问题讨论】:

如果让你猜,你会说什么? @Caleb, I'd guess it's a typo in Xcode 4.2 beta 4. 你可能是对的,我不想对仍在保密协议下的事情发表太多评论,但这不是我的猜测。 它的一个用途是继续处理通过facebook或其他应用程序登录返回的url,即。需要在应用内进行身份验证。 【参考方案1】:

来自Converting to Storyboards Release Notes:

注意:在当前的 Xcode 模板中,应用程序委托类继承自 UIResponder。这是为了让委托实例可以参与响应者链,从而处理应用程序级别的操作。如果您尚未在现有应用程序中使用此模式,则无需将其用于情节提要。

【讨论】:

【参考方案2】:

查看UIResponder 的文档。由于 AppDelegate 可以响应触摸事件,所以它实现了UIResponder 接口。

【讨论】:

【参考方案3】:

UIResponder 是 UIKit 框架的基类。 UIResponder 可以处理事件。

您的 AppDelegate 类是 UIApplication 的委托类,由 UIApplicationMain 创建。 AppDelegate 符合UIApplicationDelegate 协议。

UIResponder 类具有获取应用程序窗口焦点的方法,所有视图都将在该窗口上填充,因此您应该有一个继承自 UIResponder 的类,以便使窗口成为键。

【讨论】:

【参考方案4】:

我猜是因为它可以访问全局撤消管理器。

【讨论】:

【参考方案5】:

AppDelegate 继承自处理 ios 事件的UIResponderUIResponder 类为响应和处理事件的对象定义了一个接口。

【讨论】:

【参考方案6】:

更新:我下面的回答可能是错误的。我只是通过 iOS 文档中的图像。但是,它一定已经过时了。

除非 iOS 5 中有新的东西并且还没有记录,否则我认为这是这个 Xcode 4.2 beta 4 模板的错字。在 iOS 应用程序中,应用程序委托应继承 NSObject,而不是 UIResponder,例如:

@interface AppDelegate : NSObject <UIApplicationDelegate>

对于iOS apps, in UIKit (for Cocoa Touch, e.g., iPhone & iPad), UIApplication is the last responder in the responder chain。

对于Mac OS X apps, in the Application Kit (for Cocoa, e.g., Mac), the app delegate is the last responder in the responder chain。

【讨论】:

以上是关于为啥 AppDelegate 继承自 UIResponder?的主要内容,如果未能解决你的问题,请参考以下文章

FIRDataBaseReference 未被识别

为啥 C# 中的集合类(如 ArrayList)继承自多个接口,如果其中一个接口继承自其余接口?

值类型继承自 System.Object...为啥? [复制]

为啥 Enumerable 不继承自 IEnumerable<T>

为啥 AppDelegate 中的窗口为零

userId 来 appdelegate 还是不去 Mainviewcontroller 为啥?迅速