深入理解RunLoop
一篇很深入很深入的博文:深入理解RunLoop
苹果利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。
RunLoop 的概念
RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行Event Loop 的逻辑(让线程能随时处理事件但并不退出,在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒)
RunLoop 与线程的关系
CFRunLoop 是基于 pthread 来管理的
线程和 RunLoop 之间是一一对应的,线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。
RunLoop 对外的接口
在 CoreFoundation 里面关于 RunLoop 有5个类:
- CFRunLoopRef
- CFRunLoopModeRef(没有暴露)
- CFRunLoopSourceRef
- CFRunLoopTimerRef
- CFRunLoopObserverRef
RunLoop 的 Mode
你只能通过 mode name 来操作内部的 mode,当你传入一个新的 mode name 但 RunLoop 内部没有对应 mode 时,