我想知道编译器用来知道发生的事件的步骤,或者算法算法?例如,它如何知道已按下按钮?
答案 0 :(得分:5)
编译器 对事件一无所知。编译器只是将您的高级源代码转换为机器代码。
这属于 运行时 的范围,受操作系统(iOS),您创建的控制器(视图控制器)等影响
iOS使用“运行循环”的概念来处理和处理事件。每个iOS应用程序将始终至少有一个这样的运行循环,指定为“主”操作队列/线程,并且可能在多线程应用程序中有几个。
简而言之,主运行循环的工作方式如下:
有关详细信息,请阅读Apple's documentation on Run Loops。
答案 1 :(得分:3)
扩展JRG-Developer的答案,在您的应用程序启动后发生以下事件。
iOS将为您的应用创建一个流程,将调用入口点main()
功能。 main()
函数通过调用UIKit
来控制UIApplicationMain
框架,UIApplication
执行初始化应用并准备运行的大部分工作。您可以在流程中看到各种初始化步骤(如上图所示)。
UIApplicationMain
所做的重要事情是,
它还设置主事件循环,包括应用程序的运行循环,并开始处理事件。
iOS通常维护事件队列,然后将这些事件路由到相应应用程序的事件循环。 UIViewController
,UIWindow
,UIView
和UIResponder
都是UIResponder
的子类。 UIButton
类为响应和处理事件的对象定义了一个接口。
因此,每当您的应用中发生事件(例如点击UIApplication
)时,该事件就会在响应者链中传播,如UIViewController
- > UIView
- > {{1} } - GT;按钮
对于UIButton
您已注册选择器,通过调用addTarget:action:forControlEvents:
方法来响应事件。运行时将调用此特定操作选择器,以便您可以采取必要的操作。
下图说明了如何在主运行循环中处理事件
希望有所帮助!