【OC梳理】RunLoop了解一下

2018-03-08  本文已影响21人  忠橙_g

RunLoop的作用

OC中的RunLoop

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

RunLoop 与线程的关系

RunLoop与NSTimer

NSTimer实例需要在RunLoop上进行调度才能正常运行,NSTimer在未加入到RunLoop前,并不会产生效果,只有当其加入到RunLoop时(个人猜测此时会将要执行的事件、对应时间点等桥接到RunLoop的对应属性中),才会在RunLoop的循环中被执行。
更多NSTimer相关参考:
NSTimer详解----使用、保留环问题、与runloop的关系
重新认识NSTimer以及他与RunLoop关系

RunLoop与其他Cocoa相关

RunLoop的流程

下图就是一个RunLoop的流程:


关于source0和source1

什么时候使用RunLoop

参考文章:
关于Runloop的原理探究及基本使用
深入理解RunLoop
解密——神秘的RunLoop
NSRunLoop原理详解——不再有盲点

上一篇 下一篇

猜你喜欢

热点阅读