刨根问底iOS触摸事件——— 从“触摸屏幕”后引起的一系列连锁反应

有一次很好奇跟一个同事讨论,当我们触摸屏幕后,整个iOS系统是如何运转?实际开发中,我们都会应用UIGestureRecognizer或者UIRespose去处理事件,但是很少有人能准确回答出屏幕如何接收触摸,系统如何处理的触摸?
本文就来刨根问底,“触摸屏幕”究竟引起了那些连锁反应,那些框架参与其中。

触摸事件传递流程.jpg

上图是苹果官网总结从iOS开发者的角度给出的简图,注意我的用词,“iOS开发者的角度”和“简图”,这极度反应出苹果官方文档对整个事件的模糊处理,因为更多开发者只关心应用怎么处理各种事件。

整个iOS应用响应手指触摸后的一系列流程,整个生命周期我概括为3个阶段:系统响应 -> 桌面处理 -> App处理。

系统响应

桌面处理

App处理

概念

上面的“触摸事件全流程”中有很多重要的概念,再次做一个解释和扩展。

  • Events

Events in iOS represent fingers touching views of an application or the user shaking the device。

这是官网对Events的定义,翻译过来就是iOS事件表示手指触摸应用程序视图或者用户摇动设备。从定义入手,我们可以将事件分为两类:“触摸事件”和“运动事件”,实际上,iOS中还有一种“远程事件”,比如耳机操作等,本文主要探讨的是“触摸事件”,因此本文很多“事件”是“触摸事件”的简称。

  • UITouch

An object representing the location, size, movement, and force of a touch occurring on the screen.

表示屏幕上发生的触摸的位置,大小,移动和力度的对象。

  • UITouch.png
  • UIEvent

An object that describes a single user interaction with your app.

描述单个用户与您的应用交互的对象。


UIEvent.png
  • UIResponder


    UIResponder.png
  • Target-Action

  • Darwin
    核心操作系统层就是我们经常提到的Darwin,Darwin(达尔文)是苹果公司于2000年发布的一个开源操作系统,Darwin是macOS 和 iOS的一部分。可以将Darwin理解为操作系统的代号。Darwin由XNU和一些其他的Darwin库组成。

  • XNU
    XNU是由苹果公司发布的操作系统内核,即Darwin的内核是XNU,是Darwin操作系统的一部分。除macOS外,XNU还是iOS、tvOS、watchOS操作系统的内核。XNU是X is not Unix的缩写。XNU包含三部分:Mach内核、BSD、I/O Kit。

  • Mach
    XNU内核以一个被深度定制的Mach3.0内核作为基础。Mach是一个由卡内基梅隆大学开发的计算机操作系统微内核,主要是为了用于操作系统研究,特别是在分布式与并行运算上。XNU中的Mach所负责的功能非常少(核心功能),只能完成操作系统最基本的职责,比如任务调度、消息传递、进程间通信等。

  • BSD
    BSD,伯克利软件套件(Berkeley Software Distribution),也被称为伯克利Unix(Berkeley Unix),是一个操作系统的名称。XNU中的BSD部分提供了POSIX应用程序接口(BSD系统称之为API):进程模型、网络协议栈、虚拟文件系统等。

  • IOKit
    IOKit是一个设备驱动框架,为开发者提供了开发设备驱动程序的API。

Darwin内核.png
  • SpringBoard.app
    SpringBoard.app是一个系统进程,可以理解为桌面系统,可以统一管理和分发系统接收到的触摸事件。

参考书籍

  • EventHandlingiPhone文档
  • UIKit文档
  • IOKit源码

你可能感兴趣的:(刨根问底iOS触摸事件——— 从“触摸屏幕”后引起的一系列连锁反应)