7-1 什么是NSRunLoop?

1.什么是RunLoop

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

1.没有消息处理的时,休眠以避免资源占用
用户态 --> 内核态
2.有消息处理时,立刻被唤醒
内核态 --> 用户态 

什么是事件循环
不断的处理消息 

int main(int argc, char * argv[]) {
 内部开启Runloop 然后接受 处理 等待消息 使得main函数不结束
}
在main函数中会启动UIApplication的RunLoop 来处理用户交互的一些事件 当没有事情做时,会从用户态到内核态转换,避免资源占用,然后当前线程处于休眠的状态

CFRunLoopRef、CFRunLoopModeRef、CFRunLoopSourceRef、CFRunLoopTimerRef、CFRunLoopObserverRef

按照官方文档CFRunLoopSourceRef为3类,但数据结构只有两类(source0、source1)
CFRunLoopTimerRef是基于时间的触发器,基本上说的就是NSTimer。在预设的时间点唤醒runloop执行回调。因为它是基于RunLoop的,因此它不是实时的(就是NSTimer 是不准确的。 因为RunLoop只负责分发源的消息。如果线程当前正在处理繁重的任务,就有可能导致Timer本次延时,或者少执行一次)。

那么如何写一个准确的Timer
为什么不准 当我们使用NSTimer里面的方法 任务过重时 会出现问题
dispatch_source_set_timer

深入理解RunLoop

你可能感兴趣的:(7-1 什么是NSRunLoop?)