美文网首页
iOS的RunLoop简述

iOS的RunLoop简述

作者: 秋风绿叶168 | 来源:发表于2020-01-16 16:44 被阅读0次

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

没有消息需要处理时,休眠以避免资源占用

这时从用户态转向内核态

有消息需要处理时,立刻被唤醒

这时从内核态转向用户态

RunLoop的数据结构:

NSRunLoop是CFRunLoop的封装,提供了面向对象的API

*CFRunLoop

*CFRunLoopMode

*Source/Timer/Observer

CFRunLoop

由pthread、crrentMode、modes、commonModes、commonModeltems成员构成

CFRunLoopMode

由name、sources0、sources1、observers、timers成员组成

CFRunLoopSource

  • source0 需要手动唤醒线程(使线程从内核态切换到用户态)
  • source1 具备唤醒线程的能力

CFRunLoopTimer

基于事件的定时器 和NSTimer是toll-free bridge的

CFRunLoopObserver

观测时间点:

  • kCFRunLoopEntry
  • kCFRunLoopBeforeTimers
  • kCFRunLoopBeforeSources
  • kCFRunLoopBeforeWaiting(当前runLoop即将进入休眠状态,即将要从用户态到内核态的切换)
  • kCFRunLoopAfterWaiting(从内核态到用户态切换的不久时间)
  • kCFRunLoopExit

RunLoop可以有多个Mode,每个model结构为sources1、observers、timers

commonMode的特殊性

NSRunLoopCommonModes

  • CommonMode的特殊性不是实际存在的一种Model
  • 是同步Source/Timer/Observer到多个Model中一种技术方案

RunLoop处理流程:

image

<figcaption></figcaption>

注意

*线程是和RunLoop一一对应的

*自己创建的线程默认是没有RunLoop的

相关文章

网友评论

      本文标题:iOS的RunLoop简述

      本文链接:https://www.haomeiwen.com/subject/klafzctx.html