美文网首页iOSios开发那些事iOS 开发继续加油
iOS底层原理总结 - 探寻Runloop本质

iOS底层原理总结 - 探寻Runloop本质

作者: 二斤寂寞 | 来源:发表于2019-05-15 19:42 被阅读22次

    什么是RunLoop?RunLoop的本质:

    Runloop-Demo
    RunLoop 的概念:顾名思义,运行循环,在程序运行过程中循环做一些事情。

    01.png
    思考:我们应用程序中的main函数为什么可以保持无退出呢?
    image.png 02.png

    实际上呢,在我们的main函数中会调用UIApplicationMain函数,在这个函数中会启动一个运行循环(也就是我们所说的RunLoop),在这个运行循环中可以处理很多事件,例如屏幕的点击,滑动列表,或者网络请求的返回等等,在处理完事件之后,会进入等待,在这个循环中,并不是一个单纯的for循环或者while循环,而是从用户态到内核态的切换,以及再从内核态到用户态的切换,这里面的等待也不等于死循环,这里面最重要的是状态的切换

    Runloop对象

    iOS中提供了两个这样的对象:NSRunLoopCFRunLoopRef
    CFRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。
    NSRunLoop 是基于 CFRunLoopRef的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。
    CFRunLoopRef的代码是开源的,你可以在这里 下载到整个 CoreFoundation 的源码来查看。
    Swift 开源后,苹果又维护了一个跨平台的 CoreFoundation 版本,这个版本的源码可能和现有 iOS 系统中的实现略不一样,但更容易编译,而且已经适配了 Linux/Windows。

    image.png

    RunLoop的数据结构

    Runloop对外的接口

    RunLoop 的 Mode

    RunLoop 的内部逻辑即事件循环机制

    RunLoop 的底层实现

    RunLoop 与线程的关系

    苹果用 RunLoop 实现的功能

    RunLoop 的实际应用举例

    RunLoop相关问题总结

    Run Loops 官方文档

    Runloop图解

    参考文章:
    RunLoop本质、数据结构以及常驻线程实现
    深入理解RunLoop

    相关文章

      网友评论

        本文标题:iOS底层原理总结 - 探寻Runloop本质

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