您的位置:首页 > 移动开发 > IOS开发

<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的时间线



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退出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: