IOS触摸事件是如何从屏幕转移到APP内的?

1.手指触摸屏幕,屏幕感到触摸产生事件交给IOKit
2.IOKit会把事件包装成IOHIdEvent,经由mach_port交给SpringBoad

    mach_port 进程端口,各进程通信都是靠它
   SpringBoad 是系统进程,也可以说是系统界面进程,处理和接受触摸事件
    

3.SpingBoad进程接收到触摸事件,触发了主线程runloop的Source1事件回调

/*
 SpingBoad进程接受到触摸事件的时候,会分析触摸事件发生的时候 用户是在屏幕上界面翻 页还是在某app内,如果是前者会唤起SpingBoad本身主线程的runloop的Source0事件回调,将事件交由桌面系统去消耗,如果是后者,触摸事件通过IPC传递给前台APP进程,接下来的事情便是APP内部对于触摸事件的响应了
*/

这里说一下Source1根Source0

简单点说 Source1就是系统干的事 Source0就是我们干的事
正经说 Source1基本就是系统事件,Source0基本就是应用层事件

  • Source1 :基于mach_Port的,来自系统内核或者其他进程的事件,可以主动唤醒休眠中的RunLoop(开发过程中我们一般不主动使用IPC《进程间通信》)。mach_port大家就理解成进程间相互发送消息的一种机制就好。
  • Source0 :非基于Port的 处理事件,什么叫非基于Port的呢?就是说你这个消息不是其他进程或者内核直接发送给你的。

上面的例子就是对runloop的Source1根Source0回调,如果没有事件,也没有timer,则runloop就会睡眠, 如果有,则runloop就会被唤醒,然后跑一圈。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值