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与线程之间的关系

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,964评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,652评论 2 9