RunLoop系列(下面的文章总结的很全面,借用一下😊)
深入浅出 RunLoop(一):初识
深入浅出 RunLoop(二):数据结构
深入浅出 RunLoop(三):事件循环机制
深入浅出 RunLoop(四):RunLoop 与线程
深入浅出 RunLoop(五):RunLoop 与 NSTimer
iOS - 聊聊 autorelease 和 @autoreleasepool:RunLoop 与 @autoreleasepool
什么是RunLoop?
RunLoop是通过内部维护的 事件循环 来对 事件/消息进行管理 的一个对象。
事件循环可以达到:
有消息时,立即唤醒。
内核态>>>>>用户态
无消息时,休眠避免资源占用
用户态>>>>>内核态
main函数如何保持一直运行不退出的?
在main函数中会调用UIApplicationMain函数内部会启用主线程的RunLoop运行循环,而RunLoop又是对事件循环的维护机制,有消息时,立即唤醒
这里的,无消息时,休眠避免资源占用,使当前线程处于一个休眠的状态,从而保证不退出
RunLoop的数据结构
NSRunLoop是CFRunLoop的封装,提供了面向对象的api
CFRunLoop包含了
- pthread
- currentMode
- modes
- commonModes
- cmomonModeltems
source0
需要手动唤醒线程
source1
具备唤醒线程的能力
RunLoop的Mode
RunLoop与NSTimer
需要将NSTimer加入到RunLoop当中并设置mode
RunLoop与线程之间的关系