iOS - Runloop的运行逻辑

iOS - Runloop的运行逻辑

1. 苹果官方的Runloop执行图

2. Mode里面的东西

2.1 Source0

  • 触摸事件处理
  • performSelector:onThread:

2.2 Source1

  • 基于Port的线程间通信
  • 系统事件捕捉

系统事件捕捉:从用户点击屏幕到应用处理触摸事件,先是由Source1捕捉屏幕点击事件(系统事件),然后再包装成Source0处理触摸事件

2.3 Timers

  • NSTimer
  • performSelector:withObject:afterDelay:

2.4 Observers

  • 用于监听RunLoop的状态
  • UI刷新(BeforeWaiting)
  • Autorelease pool(BeforeWaiting)

UI刷新和Autorelease pool清理自动释放对象,都是在Runloop即将进入睡眠状态时触发(kCFRunLoopBeforeWaiting)

3. 执行流程

  1. 通知Observers:进入Loop
  2. 通知Observers:即将处理Timers
  3. 通知Observers:即将处理Sources
  4. 处理Blocks
  5. 处理Source0(可能会再次处理Blocks)
  6. 如果存在Source1,就跳转到第8步
  7. 通知Observers:开始休眠(等待消息唤醒)
  8. 通知Observers:结束休眠(被某个消息唤醒)
    1. 处理Timer
    1. 处理GCD Async To Main Queue
    1. 处理Source1
  1. 处理Blocks
  2. 根据前面的执行结果,决定如何操作
    1. 回到第02步
    1. 退出Loop
  1. 通知Observers:退出Loop

3.1 注意点

GCD很多东西不依赖于Runloop,它们是分开的。但是GCD子线程回到主线程的时候,是依赖于Runloop的

dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"");
});

4. Runloop休眠

Runloop休眠,是通过系统内核API,不同于while循环那种,而是真正地进入休眠状态

@oubijiexi

相关推荐

  1. iOS知识点---Runloop

    2024-03-30 00:52:05       36 阅读
  2. C语言中逻辑运算

    2024-03-30 00:52:05       27 阅读
  3. tcp/ip粘包问题处理逻辑

    2024-03-30 00:52:05       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 00:52:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 00:52:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 00:52:05       87 阅读
  4. Python语言-面向对象

    2024-03-30 00:52:05       96 阅读

热门阅读

  1. uniapp踩坑细节

    2024-03-30 00:52:05       46 阅读
  2. Element-UI中el-time-picker时间选择器无法选择

    2024-03-30 00:52:05       38 阅读
  3. js移除子元素

    2024-03-30 00:52:05       38 阅读
  4. 应用Druid解析SQL获取查询表字段、参数信息

    2024-03-30 00:52:05       37 阅读
  5. 5.89 BCC工具之tcptop.py解读

    2024-03-30 00:52:05       34 阅读
  6. PTA 道路管制

    2024-03-30 00:52:05       40 阅读
  7. VUE3从i18n国际化组件动态获取字符串

    2024-03-30 00:52:05       39 阅读
  8. 星图金融价值跃迁:打造“一体两翼”正向循环

    2024-03-30 00:52:05       43 阅读
  9. 5、Cocos Creator 动作系统

    2024-03-30 00:52:05       40 阅读