美文网首页
iOS的RunLoop简述

iOS的RunLoop简述

作者: 秋风绿叶168 | 来源:发表于2020-01-16 16:44 被阅读0次

    RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象。 事件循环实现:

    没有消息需要处理时,休眠以避免资源占用

    这时从用户态转向内核态

    有消息需要处理时,立刻被唤醒

    这时从内核态转向用户态

    RunLoop的数据结构:

    NSRunLoop是CFRunLoop的封装,提供了面向对象的API

    *CFRunLoop

    *CFRunLoopMode

    *Source/Timer/Observer

    CFRunLoop

    由pthread、crrentMode、modes、commonModes、commonModeltems成员构成

    CFRunLoopMode

    由name、sources0、sources1、observers、timers成员组成

    CFRunLoopSource

    • source0 需要手动唤醒线程(使线程从内核态切换到用户态)
    • source1 具备唤醒线程的能力

    CFRunLoopTimer

    基于事件的定时器 和NSTimer是toll-free bridge的

    CFRunLoopObserver

    观测时间点:

    • kCFRunLoopEntry
    • kCFRunLoopBeforeTimers
    • kCFRunLoopBeforeSources
    • kCFRunLoopBeforeWaiting(当前runLoop即将进入休眠状态,即将要从用户态到内核态的切换)
    • kCFRunLoopAfterWaiting(从内核态到用户态切换的不久时间)
    • kCFRunLoopExit

    RunLoop可以有多个Mode,每个model结构为sources1、observers、timers

    commonMode的特殊性

    NSRunLoopCommonModes

    • CommonMode的特殊性不是实际存在的一种Model
    • 是同步Source/Timer/Observer到多个Model中一种技术方案

    RunLoop处理流程:

    image

    <figcaption></figcaption>

    注意

    *线程是和RunLoop一一对应的

    *自己创建的线程默认是没有RunLoop的

    相关文章

      网友评论

          本文标题:iOS的RunLoop简述

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