美文网首页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