什么是runloop?

Runloop是通过内部维护的事件循环来对事件/消息进行管理的一个对象

事件循环:没有消息需要处理时,休眠以避免资源占用

			   有消息处理时,立刻被唤醒

			   也就是在用户态和内核态相互转换

ps:runloop  保证循环不退出 负责监听事件,触摸 时钟timer  网络事件  如果没有事件 会让程序进入休眠状态

UI模式优先级最高

默认模式

[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];

UI模式

[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:UITrackingRunLoopMode];

混合占位模式

[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

NSRunLoopCommonModes

commonMode不是实际存在的一种mode

是同步source/Timer/Observer到多个Mode的一种技术方案

#### 其实主线程和子线程 唯一的区别是 主线程多了一个UI线程 而且主线程 既要保证体验也要保证安全 UIKIT框架是线程不安全的 所以需要用runloop去保证他的安全

截图.png

通过GCD创建出来的定时器 不受UI线程的干扰 依然能准确的执行 内部已经封装好了