iOS应用,事件处理整个过程简要说明。从事件被生产到被消费

iOS事件

iOS事件,代表手指触摸应用视图或者用户摇晃设备。 当手指触摸或者摇晃设备时,iPhone的多触摸系统就会注册这些触摸作为事件,并把他们发送给当前应用去处理。

事件循环

在主事件循环中,一个应用持续把接收到的事件路由到相应的对象上去处理,处理结果由对象去呈现并记录状态。 一个事件循环,就是一个简单的run-loop。 run-loop ,周期运行并平衡处理从各种绑定的数据源接受到的事件。 每一个线程,都有一个run-loop。除了主线程之外,其它线程的run-loop必须由代码配置启动,主线程中的run-loop , 是由应用自动运行的 。 主线程的run-loop和其它线程的run-loop ,区别之处在于,主线程run-loop的输入源从操作系统接受事件,这些事件都是由用户产生的, 例如: 点击view或者用键盘输入文本等。

事件处理流程

应用一旦启动,它就会为主事件循环做一些初始化操作, 应用会和底层负责转发用户事件的组件建立连接。 应用通过安装在主线程的run-loop的输入源接收事件。 因为应用必须单独并有序的处理每一个事件,所以这些事件会被放到一个先进先出的事件队列中。

一旦应用界面出现在屏幕上,应用就被事件驱动。 应用获取队列中最顶层的事件,然后分发给应用中对应的对象去处理。 当分发过程完成后,应用就会从队列中取出下一个事件并再次分发,一直循环,直到应用终止。

当应用获取到事件,会被分发给发生事件的window,window再分发事件给最适合处理它的视图view上, 也就是知名的hit-test-view(前提条件,必须是UIResponder对象或者派生类,而且有意愿成为第一响应者。- (BOOL)canBecomeFirstResponder { return YES; }
)。 如果这个view不能处理这个事件, 事件会沿着响应者链向上进行传递,直到被处理或者被丢弃。

在这里插入图片描述

响应者链

响应者链,可以理解为链表。
响应者链,允许response对象,有责任转发待处理事件给其它对象。 待处理事件,向上传递,直到被处理或被丢弃。
对iOS来说,响应者链顺序如下(其中controller,看实际情况,有或者没有 ,但大多数情况都会有):
view -> parent view -> parent view -> …(parent view)… [-> controller] -> window - application

例如,如果一个视图view由view controller管理,那么如果view无法处理事件,则view controller成为next responder
在这里插入图片描述

参考:
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值