美文网首页
Runloop学习笔记

Runloop学习笔记

作者: 雨林QiQi | 来源:发表于2020-04-12 15:35 被阅读0次

    一、Runloop是什么

        Runloop是一个运行循环,本质是一个对象。内部实现是一个do while循环,保证应用程序不被退出。

    二、Runloop的作用

        

         保证程序的持续运行

        处理App中的各种事件(block、timer、source0、source1、GCD主队列、oberver)

        节约cpu资源,保证程序的性能:该做事就做事,该休息就休息

    三、Runloop和线程的关系

        线程和runloop是通过key-value的形式一一对应的关系    

        注意一点:子线程runloop默认不开启

    四、Runloop对象和mode

         model:是runloop里面的模式,不同的模式下的runloop处理的事件和消息有一定的差别。

        系统默认注册了5个Mode:

            (1)kCFRunLoopDefaultMode: App的默认 Mode,通常主线程是在这个 Mode 下运行的。

            (2)UITrackingRunLoopMode: 界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响。

            (3)UIInitializationRunLoopMode: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用。

            (4)GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常用不到。

            (5)kCFRunLoopCommonModes: 这是一个占位的 Mode,没有实际作用。

    五、RunloopSource、Observer、timer

        timer、obsever、source加入到runloop相应mode的items中执行。

        1.timer加入的mode和现在runloop的mode相等,则执行。或者, timer加入的mode与COmmonMode相等也可以执行。

        2.observer监听runloop的状态,没有用的时候就休眠。

        3.source分source0和source1

            (1)响应事件source0:处理App内部事件以及App内部管理的事件,比如UIEvent和CFSocket

                    signal待处理

                    wakeup唤醒runloop处理事件

            (2)source1:线程与线程之间的通信。source1通过port进行线程之间的通讯。

        

    相关文章

      网友评论

          本文标题:Runloop学习笔记

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