RunLoop的字面意思就是“运行回路”,每一个线程都有一个RunLoop。
Each NSThread object, including the application’s main thread, has an NSRunLoop object automatically created for it as needed.
不一样的是,主线程的RunLoop是一直在启动的。而后台线程的RunLoop是默认没有启动的。
Runloop提供了Event Loop,管理事件、消息,让线程在没有任务时休眠以避免占用资源、有消息进来时立刻被唤醒。
Event Loop 消息循环流程 "接受消息"->"等待"->"处理消息"
Runloop和线程是一一对应保存在全局的字典里面。线程(非主线程)刚创建时并没有Runloop,当你需要时创建,线程结束时Runloop销毁。
苹果不允许直接创建 RunLoop,你只能在线程内部获取,它提供了两个自动获取的函数
:CFRunLoopGetMain() 和 CFRunLoopGetCurrent()。