利用 RunLoop 实现线程保活(Thread Keep Alive)是 iOS/macOS 开发中的一个经典面试题,也是处理后台常驻任务(如网络监控、语音识别监听等)的常用技巧。 默认情况下,线程执行完入口方法(Block 或 Selector)后就会自动退出并释放。要让线程“活”下来等待下一次调用,我们需要启用该线程的 RunLoop。 以下是实现线程保活的核心原理和具体步骤。 --- 核心原理 1. RunLoop 与线程的关系:每个线程都有一个对应的 RunLoop,但只有主线程的 RunLoop 是默认启动的。子线程的 RunLoop 需要手动获取并启动。 2. RunLoop 的退出机制:如果 RunLoop 中没有任何 Source (输入源/Port)、Timer (定时器) 或 Observer (观察者),RunLoop 启动后会立刻退出。 3. 保活的关键:为了不让 RunLoop 退出,我们需要在启动 RunLoop 之前,向其添加一个占位的 Port(或者 Timer),即使这个 Port 什么都不做。 --- 实现步骤 (Swift 示例) 我们将创...