<iOS>RunLoop
2015-10-12 15:24
561 查看
主题:RunLoop:字面意思是一直循环的运行,它就像App中跳动的心脏一样,一直伴随着App的声明周期。
内容:到底什么是RunLoop,简单地说,RunLoop就是一个消息传送机制,用于异步的或线程内部的通信,它提供了一套机制来处理系统的输入源(像sockets,ports,files,keyboard,mouse,定时器等),可以把它想象成是一个邮局,在等待信件和传递信件给收件人,每个NSThread都有属于它自己的RunLoop。
一个RunLoop做两件事情:
1、处于等待的状态直到某件事情发生(比如想接受一个信息)。
2、分配信息给需要接收的对象。
RunLoop可以用来区分交互式App和命令行。
命令行通过一些参数运行后,执行完它们的程序,这个程序就结束了,就像"Hello world",只要打印出"Hello world",这个程序也就结束了。
交互式App就会一直等待用户输入,然后做出反应,然后再等待用户输入,知道某一个触发条件发生,才会退出程序。
从上面可以看出,RunLoop的工作实际上就是在等待触发事件的发生。这些触发事件可以是外部的事件,比如用户的一些行为或者像网络请求,又或者像App内部的信息:比如线程内部的通知、异步代码的执行、定时器等等,一旦一个触发事件发生,并且RunLoop接受到这个信息,它就会去找相关的收信人,并把信息发送给这个收信人。
RunLoop的时间线
![](https://img-blog.csdn.net/20151012155115447?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1、通知观察者RunLoop已经被启动
2、通知观察者一些定时器已经准备开始
3、通知观察者一些不是基于端口的输入源准备开始
4、启动那些已经准备好的不是基于端口的输入源
5、如果一个基于端口的输入源已经准备好,正等待被启动,那么就会马上启动这个输入源,进入第9步
6、通知观察者这个线程准备休眠
7、把这个线程变成休眠状态直到下面一个事件发生:
a、一个事件到达了一个基于端口的源
b、一个定时器启动
c、RunLoop设置的时间已经到时
d、该RunLoop被唤醒
8、通知观察者该线程被唤醒
9、处理等待事件
a、如果一个用户定义的定时器启动,处理这个定时器并且进入下一个RunLoop,进入第2步
b、如果一个输入源启动,传递这个事件
c、如果这个RunLoop被唤醒,但是还超过设置的超时时间,那么久进入下一个RunLoop,进入第2步。
10、通知观察者RunLoop退出。
内容:到底什么是RunLoop,简单地说,RunLoop就是一个消息传送机制,用于异步的或线程内部的通信,它提供了一套机制来处理系统的输入源(像sockets,ports,files,keyboard,mouse,定时器等),可以把它想象成是一个邮局,在等待信件和传递信件给收件人,每个NSThread都有属于它自己的RunLoop。
一个RunLoop做两件事情:
1、处于等待的状态直到某件事情发生(比如想接受一个信息)。
2、分配信息给需要接收的对象。
RunLoop可以用来区分交互式App和命令行。
命令行通过一些参数运行后,执行完它们的程序,这个程序就结束了,就像"Hello world",只要打印出"Hello world",这个程序也就结束了。
交互式App就会一直等待用户输入,然后做出反应,然后再等待用户输入,知道某一个触发条件发生,才会退出程序。
从上面可以看出,RunLoop的工作实际上就是在等待触发事件的发生。这些触发事件可以是外部的事件,比如用户的一些行为或者像网络请求,又或者像App内部的信息:比如线程内部的通知、异步代码的执行、定时器等等,一旦一个触发事件发生,并且RunLoop接受到这个信息,它就会去找相关的收信人,并把信息发送给这个收信人。
RunLoop的时间线
1、通知观察者RunLoop已经被启动
2、通知观察者一些定时器已经准备开始
3、通知观察者一些不是基于端口的输入源准备开始
4、启动那些已经准备好的不是基于端口的输入源
5、如果一个基于端口的输入源已经准备好,正等待被启动,那么就会马上启动这个输入源,进入第9步
6、通知观察者这个线程准备休眠
7、把这个线程变成休眠状态直到下面一个事件发生:
a、一个事件到达了一个基于端口的源
b、一个定时器启动
c、RunLoop设置的时间已经到时
d、该RunLoop被唤醒
8、通知观察者该线程被唤醒
9、处理等待事件
a、如果一个用户定义的定时器启动,处理这个定时器并且进入下一个RunLoop,进入第2步
b、如果一个输入源启动,传递这个事件
c、如果这个RunLoop被唤醒,但是还超过设置的超时时间,那么久进入下一个RunLoop,进入第2步。
10、通知观察者RunLoop退出。
相关文章推荐
- ios CAAnimation初窥
- iOS中属性与成员变量的区别
- iOS 的本地通知知识的解释
- GCD实现计时器
- iOS 9适配技巧(更新版)
- iOS开发日记33-hit-Test
- iOS-BUG整理 设置按钮图片和文字遇到的问题
- IOS去除第三方控件中的字符
- 用CocoaPods做iOS程序的依赖管理
- ios应用加速审核通道
- iOS公司开发者账号申请详细教程
- ios Undefined symbols for architecture arm64
- ios9 苹果原生视频播放器
- IOS CoreText.framework --- 段落样子CTParagraphStyle
- iOS 解析JSON
- iOS 9适配技巧(更新版)
- [IOS 开发] OC 定义一个方法,参数数量可变.
- IOS9之后适配需要注意的问题
- iOS9适配系列教程
- iOS开发——视频播放