iOS 底层 - runloop的基本认识

2020-04-05  本文已影响0人  水中的蓝天

本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢 !


iOS系统中有两个关于Runloop的对象:NSRunLoopCFRunLoopRef
NSRunloop是Foundation框架提供的,是对CoreFoundation框架提供的CFRunloopRef的封装。
CoreFoundation提供的是纯C语言的API,都是线程安全的,Foundation不是线程安全的。
IOS 中Foundation是不开源的;
iOS 中RunLoop是开源的,在CoreFoundation的开源代码中,可以在这里下载:RunLoop源码

什么是RunLoop

RunLoop顾名思义就是运行循环,是在程序运行中循环做一些事情;有五种状态其中模式

RunLoop的基本作用是什么?有什么意义?系统中在那些地方有用到它 ?实际开发中会有哪些应用 ?

一般多用于以下几种场景:

RunLoop对象简单使用

//获得当前线程的RunLoop对象
[NSRunLoop currentRunLoop]
CFRunLoopGetCurrent()

//获得主线程的RunLoop对象
[NSRunLoop mainRunLoop]    
CFRunLoopGetMain()

RunLoop与线程的关系

GCD函数能单独实现线程保活吗 ?

不能够的,GCD是开辟多线程执行任务,同时能够保证线程安全;就算GCD有相关API可以控制线程生命周期,本质上还是因为GCD内部用到了Runloop。线程的生命周期控制只有通过RunLoop技术才能实现。

上一篇 下一篇

猜你喜欢

热点阅读