type
status
date
slug
summary
tags
category
icon
password
这里只解释 source0 和 source1
  • Source1 :基于 mach_Port 的,来自系统内核或者其他进程或线程的事件,可以主动唤醒休眠中的RunLoop(iOS里进程间通信开发过程中我们一般不主动使用)。mach_port 大家就理解成进程间相互发送消息的一种机制就好, 比如屏幕点击, 网络数据的传输都会触发 sourse1。
  • Source0 :非基于 Port的 处理事件,什么叫非基于Port的呢?就是说你这个消息不是其他进程或者内核直接发送给你的。一般是APP内部的事件, 比如 hitTest:withEvent 的处理, performSelectors的事件.
这段话几乎在所有的 Runloop 解释里都会有出现,那么什么是基于 Port 处理呢,其实就是直观的意思 Port(端口号),是否基于端口号处理。我们知道 ip + 端口号 = socket,在 pc 或者手机上等这些操作系统内,想要调用另一个程序就是 ip + 端口号 找到的程序进行运行,在与其它设备进行通信时,也是 ip + 端口号进行数据传输(不过内网 ip 是 127.0.0.1,外网 ip 不固定)
基于这个理解,屏幕点击 和 网络数据的传输 其实都是由 iPhone 设备的其它端口号的程序在运行管理的,也可以理解为 屏幕点击 和 网络传输 是两个独立的进程。
所以我们在屏幕点击的时候,属于外部程序(屏幕点击 App 对 Event 进行了一个打包给了我们的 Ap)对我们自己的 App 的一个访问。这就是 scource1 需要处理的事情
而在程序内的事件,比如 hitTest、pointInside 等这些方法是在程序内部调用的。这就是 source0 需要处理的事情
题外话:
开子线程搞个死循环检测 source1 到 source0 之间的时间就是检测卡顿的原理
UIButton 扩大点击事件的三种方式手把手教你写一个可以上下滑动点改变值的安卓折线图