RunLoop 的核心逻辑主要是在 框架下的 文件中的 函数里实现的。 虽然网上常说“六步”,但严格对应源码来看,其内部逻辑更为细致,通常分为 10 个关键节点。为了方便理解,我们可以将其归纳为几个大的阶段。 以下是 RunLoop 内部逻辑的详细流程解析: 核心流程图解 RunLoop 的本质是一个 循环,其核心在于“接收消息 -> 等待 -> 处理”。 第一阶段:准备与通知 (Entry & Pre-check) 1. 通知 Observers:即将进入 Loop 状态: 说明:告诉观察者,RunLoop 启动了。 2. 通知 Observers:即将处理 Timers 状态: 说明:通知观察者即将处理定时器回调。 3. 通知 Observers:即将处理 Sources 状态: 说明:通知观察者即将处理输入源(非基于 Port 的 Source0)。 4. 处理 Source0 (非基于 Port 的源) 操作:执行 等由应用层触发的事件。 关键点:如果处理完 Source0 后,发现有 Source1 (基于 Port 的源) 已经准备好了,或者有主队列的 GCD 任务,...