【问题标题】:How does UIApplication take an event from the top of event queueUIApplication 如何从事件队列顶部获取事件
【发布时间】:2015-11-09 19:50:35
【问题描述】:

我在官方文档中看到了这个:

首先,单例 UIApplication 对象从队列顶部获取一个事件并调度它进行处理。

这是怎么发生的?? 在文档中还有这个部分:

应用在触摸处理方法中接收触摸:

在多点触控序列中,当给定的触控阶段有新的或更改的触控时,应用会发送这些消息;它调用了

touchesBegan:withEvent: 一根或多根手指触摸屏幕时的方法.....

谁能解释一下这行“..一个应用程序发送这些消息...”。文档中正在谈论哪些“消息”非常模棱两可!!!!

文档链接:https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html#//apple_ref/doc/uid/TP40009541-CH2-SW2

另外,UIApplication 如何在内部将事件发送到 keyWindow? 它是使用 sendEvent 还是有类似的代码

[[self keyWindow] touchesBegan:touches withEvent:event];

【问题讨论】:

    标签: ios objective-c iphone xcode


    【解决方案1】:

    这是怎么发生的??

    队列是一种先进先出的数据结构。你把东西放在一端,你把它们放在另一端。究竟调用什么方法来做到这一点取决于操作系统是如何实现事件队列的,但最终这真的无关紧要,实际上它可能在不同版本的操作系统中以不同的方式完成。 事件队列是一个实现细节,所以你不应该对它的工作方式做出任何假设。

    谁能解释一下这行“..一个应用程序发送这些消息...”。

    这只是意味着应用程序在某些对象上调用了某些方法。在 Objective-C 中,“发送消息”是“调用特定对象的实例方法”的另一种说法。如果你有:

    [foo bar];
    

    您正在向foo发送消息bar

    【讨论】:

    • 我知道发送消息的概念....我对该行中的逻辑感到困惑。它是否说 UIApplication 对象发送诸如 touchesBegan:withEvent: 之类的消息?我了解到的是 UIResponder 子类使用 touchesBegan:withEvent: 等方法响应事件:......那么它到底是什么意思?文档中讨论了哪些消息?
    • 当然。响应者实现-touchesBegan:... 等,但如果它们永远不会被调用,那么这些实现就没有多大意义,对吧?应用程序负责调度事件。它不断地检查新事件,当它收到一个事件时,它会找到应该响应的对象并向其发送适当的消息。在某些情况下(例如按下键盘上的键),它使用第一响应者;在其他情况下(如触摸),它将使用hit testing 来查找包含触摸的视图。
    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2018-09-18
    相关资源
    最近更新 更多