source0/source1

作者: 月禅 | 来源:发表于2019-11-18 11:42 被阅读0次

    Source有两个版本:Source0 和 Source1。

    source0和source1很容易让人糊涂,为了让大家更好理解,我先阐述写其他的概念,我们知道APP运行的过程其实就是处理各种事件的过程,那么,如果让大家

    把事件进行分类,大家会分成几类?分类的方式有很多,但一定会有下面这种:

    系统层事件、应用层事件、特殊事件。(这只是为了大家理解source1和source0举得一个不严谨的例子,大家不要在意细节)

    如果上面对事件分类的方式你理解,那就好办了,特殊事件我们不管,那么,source1基本就是系统事件,source0基本就是应用层事件。好,下面我们来说source0和source1.

    • Source1 :基于mach_Port的,来自系统内核或者其他进程或线程的事件,可以主动唤醒休眠中的RunLoop(iOS里进程间通信开发过程中我们一般不主动使用)。mach_port大家就理解成进程间相互发送消息的一种机制就好。
    • Source0 :非基于Port的 处理事件,什么叫非基于Port的呢?就是说你这个消息不是其他进程或者内核直接发送给你的。

    简单举个例子:一个APP在前台静止着,此时,用户用手指点击了一下APP界面,那么过程就是下面这样的:

    我们触摸屏幕,先摸到硬件(屏幕),屏幕表面的事件会先包装成Event, Event先告诉source1(mach_port),source1唤醒RunLoop, 然后将事件Event分发给source0,然后由source0来处理。

    如果没有事件,也没有timer,则runloop就会睡眠, 如果有,则runloop就会被唤醒,然后跑一圈。

    相关文章

      网友评论

        本文标题:source0/source1

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