RunLoop 和线程(Thread)是 iOS/macOS 开发中密不可分的两个概念。用一句话总结它们的关系: RunLoop 是为了管理线程而存在的,它们之间是「一一对应」的关系。 以下是详细的深度解析: 1. 核心关系:一一对应 映射关系: 每个线程(Thread)都有且仅有一个 RunLoop 对象与之对应。 存储方式: 在底层(Core Foundation 源码中),RunLoop 是存储在一个全局的 中的。 Key: 线程对象()。 Value: 对应的 RunLoop 对象()。 2. 创建与获取机制(Lazy Loading) RunLoop 并不是线程创建时自动生成的(主线程除外),而是懒加载(Lazy Loading)的。 主线程(Main Thread): 系统在 App 启动时,会自动为主线程创建并启动一个 RunLoop。这是因为主线程需要一直处理 UI 事件、手势、屏幕刷新等,不能退出。 子线程(Background Thread): 默认情况下,子线程没有 RunLoop。 如果你不主动获取,它就没有。 当你第一次调用 或 时,系统会检测该线程是否...