为啥 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 事件的UIResponder
。 UIResponder
类为响应和处理事件的对象定义了一个接口。
【讨论】:
【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 C# 中的集合类(如 ArrayList)继承自多个接口,如果其中一个接口继承自其余接口?
值类型继承自 System.Object...为啥? [复制]