RunLoop简介
Hello,大家好.今天给大家来个RunLoop知识点简介,让你痛快的快速了解什么是所谓的RunLoop.
所谓Run Loop就是一个循环,在iOS开发中我们的进程(APP)之所以能运行起来不会挂掉那是因为苹果给我们的程序加了个Run Loop死循环让这个程序一直在跑圈圈.我们看看苹果官方文档给的图片,下图清楚解释RunLoop的概念结构以及各种源.
那么RunLoop作用是什么呢?
①让你的进程(APP)保持运行不会被挂掉
②处理与用户交互的各种事件(例如点击,定时,Selector事件)
③提高程序性能,该干活干活该睡觉睡觉
RunLoop底层实现原理
RunLoop接收输入事件的2种来源
①输入源(input source) ②定时源(timer source).
输入源: 传递异步事件,通常消息来自于其他线程或程序(进程).
定时源:传递同步事件,在特定的时间或者重复的时间间隙.
除了处理输入源,run loops 也会生成关于 run loop 行为的通知 (notifications)。注册的 run loop 观察者(run-loop Observers)可以收到这些通知, 并在线程上面使用它们来做额外的处理。你可以使用 Core Foundation 在你的线程注 册 run-loop 观察者。
RunLoop对象
iOS中有2套API访问使用RunLoop
①OOP中Foundation框架下的NSRunLoop
②C语言中Core Foundation框架下的CFRunLoop
注意点!他们都代表RunLoop对象只不过NSRunLoop是苹果帮我们加了层OC包装给CFRunLoop
开源的CFRunLoop地址:
http://opensource.apple.com/source/CF/CF-1151.16/
CFRunLoop中的五个类
①CFRunLoopRef
②CFRunLoopModeRef
③CFRunLoopSourceRef
④CFRunLoopTimerRef
⑤CFRunLoopObserverRef
对CFRunLoop几个类的认识
①CFRunLoopModeRef代表了RunLoop的运行模式,每次RunLoop启动时候我们称为CurrentMode,只能指定一个.因为一个RunLoop包含很多的Model,每个Model中又包含Source/Timer/Observer若干个,这样实现的原理是因为让不同Model中的Source/Timer/Observer互相不干扰.
②系统默认注册了5个类简介如下图,我们一般情况下使用kCFRunLoopCommonModes: 这是一个占位用的Mode,不是一种真正的Mode但是他拥有(UITrackingRunLoopMode与kCFRunLoopDefaultMode两种功能)