<iOS>RunLoop

主题: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退出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值