RunLoop

RunLoop知识体系

RunLoop系列(下面的文章总结的很全面,借用一下)
深入浅出 RunLoop(一):初识
深入浅出 RunLoop(二):数据结构
深入浅出 RunLoop(三):事件循环机制
深入浅出 RunLoop(四):RunLoop 与线程
深入浅出 RunLoop(五):RunLoop 与 NSTimer
iOS - 聊聊 autorelease 和 @autoreleasepool:RunLoop 与 @autoreleasepool

什么是RunLoop?
RunLoop是通过内部维护的 事件循环 来对 事件/消息进行管理 的一个对象。
事件循环可以达到:
有消息时,立即唤醒。
内核态>>>>>用户态
无消息时,休眠避免资源占用
用户态>>>>>内核态

WeChat9b3c513a88fe004276e24aa359c708c9.png

main函数如何保持一直运行不退出的?
在main函数中会调用UIApplicationMain函数内部会启用主线程的RunLoop运行循环,而RunLoop又是对事件循环的维护机制,有消息时,立即唤醒
这里的,无消息时,休眠避免资源占用,使当前线程处于一个休眠的状态,从而保证不退出

RunLoop的数据结构
NSRunLoop是CFRunLoop的封装,提供了面向对象的api

CFRunLoop包含了

  • pthread
  • currentMode
  • modes
  • commonModes
  • cmomonModeltems

source0
需要手动唤醒线程

source1
具备唤醒线程的能力

531617634384_.pic_hd.jpg

RunLoop的Mode

RunLoop与NSTimer
需要将NSTimer加入到RunLoop当中并设置mode

RunLoop与线程之间的关系

你可能感兴趣的:(RunLoop)