Runloop学习笔记

2020-04-12  本文已影响0人  雨林QiQi

一、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进行线程之间的通讯。

    

上一篇 下一篇

猜你喜欢

热点阅读