什么是Runloop
runloop是通过内部维护的事件循环来对事件/消息进行管理的一个对象
- 没有消息需要处理时候,休眠以避免资源占用 (用户态->内核态)
- 有消息需要处理时,立刻被唤醒(内核态->用户态)



CFRunloopSource
- source0(需要手动唤醒线程)
- source1(具备唤醒线程的能力)
CFRunloopTimer
基于事件的定时器,和NSTimer是toll-free bridged
CFRunloopObserver
观测时间点
- KCFRunLoopEntry
- KCFRunLoopBrforeTimers
- kCFRunLoopBeforsources
- kCFRunLoopBeforeWaiting(即将产生用户态切换内核态)
- kCFRunLoopAfterWaiting
- kCFRunLoopExit


NSRunLoopCommonModes
- CommmonModes不是实际存在的一种Mode
- 是同步Source/Timer/Observer到多个Mode中的一种技术方案

RunLoop和NSTimer
void CFRunLoopAddTimer(runloop, timer, commonMode)
RunLoop和多线程
- 线程和Runloop是一一对应的
- 手动创建的线程默认没有Runloop
如何实现一个常驻线程
step1: 为当前线程开启一个runloop
step2: 向改runloop添加一个Port/Source等维持Runloop的事件循环
step3: 启动该runloop