RunLoop简介

作者: Bob林 | 来源:发表于2016-09-04 18:23 被阅读18次

RunLoop简介

Hello,大家好.今天给大家来个RunLoop知识点简介,让你痛快的快速了解什么是所谓的RunLoop.
所谓Run Loop就是一个循环,在iOS开发中我们的进程(APP)之所以能运行起来不会挂掉那是因为苹果给我们的程序加了个Run Loop死循环让这个程序一直在跑圈圈.我们看看苹果官方文档给的图片,下图清楚解释RunLoop的概念结构以及各种源.
runLoop.png
那么RunLoop作用是什么呢?
①让你的进程(APP)保持运行不会被挂掉
②处理与用户交互的各种事件(例如点击,定时,Selector事件)
③提高程序性能,该干活干活该睡觉睡觉

RunLoop底层实现原理

RunLoop底层实现原理.png

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两种功能)
5.png source.png timer.png observe.png

网友整理的RunLoop处理逻辑

处理逻辑.png

苹果整理的RunLoop处理逻辑

苹果.png

相关文章

网友评论

    本文标题:RunLoop简介

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