美文网首页
iOS runloop 知识点总结

iOS runloop 知识点总结

作者: 唯忆青语 | 来源:发表于2021-03-24 17:01 被阅读0次

一:runloop相关知识

1. runloop是什么

   runloop是通过内部维护的时间循环,来对事件/消息进行管理的对象

2. runloop特征

(1)没有消息处理时休眠,避免资源占用(用户态切换到内核态)

(2)有消息处理时立刻被唤醒(内核态切换到用户态)

3. runloop有哪几种mode

(1) NSDefaultRunLoopMode: 默认模式

(2) NSRunLoopCommonModes:mode集合

(3) UITrackingRunloopMode:跟踪用户交互事件

(4) UIInitializationRunloopMode:初始化模式,程序启动完后不再调用

(5) GSEventReceiveRunloopMode: 接受系统内部事件

4. runloop数据结构

① CFRunloop: runloop对象 

     由以下几个部分组成。

     Pthred:线程,与runloop是一一对应的关系

     commonModes:       字符串集合。一个字符串对应一种mode

     commonmodelItems:observer/timer/source的统称

     currentMode          当前mode

     Modes               是runloopmode的无序集合

② CFRunloopMode: runloop运行模式 

(由name,source0,source1,observer,timer 组成)

③ CFRunloopSource: 输入源/事件源

          有两种:source0: 用户触发的事件

                         Source1: 系统发送的消息

④ CFRunloopTimer: 定时源

⑤ CFRunloopObserver:观察者 用户监听以下时间点

l    kCFRunLoopEntry            // 即将进入Loop

l     kCFRunLoopBeforeTimers    // 即将处理 Timer

l     kCFRunLoopBeforeSources  // 即将处理 Source

l     kCFRunLoopBeforeWaiting  // 即将进入休眠

l     kCFRunLoopAfterWaiting  // 刚从休眠中唤醒

l     kCFRunLoopExit            // 即将退出Loop

5. runloop各个数据结构之间的关系

(1)一个runloop对用多种mode,每个model下又有多种source。Observer,timer

(2)runloop启动时,只能指定一个mode,这个mode被称为currentMode

(3)如果需要切换mode,只能退出loop,再重新指定一个mode进入。

6. runloop实现机制

(1)、通知观察者 RunLoop 即将启动。

(2)、通知观察者即将要处理Timer事件。

(3)、通知观察者即将要处理source0事件。

(4)、处理source0事件。

(5)、如果基于端口的源(Source1)准备好并处于等待状态,进入步骤9。

(6)、通知观察者线程即将进入休眠状态。

(7)、将线程置于休眠状态,由用户态切换到内核态,直到下面的任一事件发生才唤醒线程。

- 一个基于 port 的Source1 的事件(图里应该是source0)。

- 一个 Timer 到时间了。

- RunLoop 自身的超时时间到了。

- 被其他调用者手动唤醒。

(8)、通知观察者线程将被唤醒。

(9)、处理唤醒时收到的事件。

- 如果用户定义的定时器启动,处理定时器事件并重启RunLoop。进入步骤2。

- 如果输入源启动,传递相应的消息。

- 如果RunLoop被显示唤醒而且时间还没超时,重启RunLoop。进入步骤2

(10)、通知观察者RunLoop结束。

二:runloop与线程

1.runloop与线程是什么关系

(1)一一对应的关系,一个线程对应一个runloop。

(2)主线程默认开启runloop,子线程/自己创建的线程需要手动开启runloop。

相关文章

  • RunLoop 相关

    谨以此篇总结归纳记录iOS中一大知识点 RunLoop 的相关知识,以作备忘。 iOS中,提供了两种runloop...

  • iOS Runloop

    这里记录下iOS中Runloop相关的知识点,以备以后复习总结。 先来说下Runloop相关的概念: Runloo...

  • iOS知识体系总结-RunLoop

    注意:更新内容会同步到GitHub iOSWiki-知识体系总结 总结-RunLoop iOS知识点/RunLoo...

  • iOS 常见知识点(一):Runtime

    iOS 常见知识点(二):RunLoop iOS 常见知识点(三):Lock Runtime Runtime 是一...

  • iOS RunLoop 总结以及相关面试题解答

    iOS RunLoop 总结以及相关面试题解答 iOS RunLoop 总结以及相关面试题解答

  • RunLoop

    iOS刨根问底-深入理解RunLoop runloop 和线程有什么关系 iOS 多线程:RunLoop详细总结

  • NSRunLoop

    【iOS程序启动与运转】- RunLoop个人小结 RunLoop总结:RunLoop的应用场景(三) 走进Run...

  • 探寻RunLoop的本质

    iOS底层原理总结 - RunLoop 面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑...

  • GeekBand - iOS 多线程和RunLoop 总结

    iOS 开发高级进阶 第三周 多线程 Runloop iOS 多线程以及 RunLoop 学习总结 基础知识 什么...

  • iOS底层原理——浅谈RunLoop

    RunLoop应用:线程保活 线程保活、控制销毁 iOS-浅谈RunLoop8iOS底层原理总结 - RunLoo...

网友评论

      本文标题:iOS runloop 知识点总结

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