【多线程-第二天-消息循环 Objective-C语言】

一、消息循环

通知

1.消息循环:是一个比较复杂的概念,我们只是提取里边的两个核心,来给大家介绍,

1)什么是消息循环:Runloop就是消息循环,OC里边有一个类,叫做NSRunLoop,对应着我们这里边的消息循环,每一个线程内部,都有一个消息循环,主线程的消息循环,在开启的时候,会创建一个自动释放池,

2)只有主线程的消息循环默认是开启的,子线程的消息循环默认是不开启的,如果你想用,你需要自己来开启,一般情况下,我们是不用的,一般情况下,我们是不用去操作、干预这个消息循环的,

2.消息循环的目的:

1)保证程序不退出:命令行的程序,如果不做任何处理,运行完就退出掉了,但是iOS的程序,运行起来一直不会退出,为什么不会退出呢,就因为有消息循环,我们怎么样在命令行的程序里面模拟消息循环,就是写一个死循环,然后用scanf处理用户输入,

2)负责处理输入事件:这个我们也模拟了,我们等着,我们写了一个scanf,等着用户给我交互,当用户给我交互的时候,我就在循环里边去处理这件事情,

3)如果没有事件进来,会让程序进入休眠状态:我们昨天写的那个死循环呢,它不用在执行吧,它是在等待吧,scanf,等待用户的输入,OK,这是消息循环的目的,

3.我们再来看啊,我们来看消息循环里边的两个核心点,

通知

1)第一个核心点叫做,输入事件:消息循环有一个目的,是处理输入事件,那输入事件啊,我们官方文档里边可以看到,这个输入事件里边,包括两类,一个叫做:

输入源(input source):就是触摸屏幕等等事件,

定时源(timer source):就是定时器,

这是输入事件,可以分为两类,这两个哪个你熟悉,

输入源:input for sources such as mouse and keyboard events from the window system, NSPort objects, and NSConnection objects . An NSRunLoop object also processes NSTimer events.

输入源:来自窗口系统、NSPort对象和NSConnection对象的鼠标和键盘事件等源的输入。NSRunLoop对象还处理NSTimer事件。

mouse and keyboard:鼠标和键盘事件,换到我们iOS中,就是输入事件了吧,手指触摸事件,包括,这些事件,还有其他的一些内容,这块儿有一张图片,

通知

这张图里边,就给我们画出来了这两个输入事件:一个是输入源、一个是定时源、定时源就是定时器,

输入源里边,包括好多,包括键盘鼠标的事件,触摸事件,还有NSPort,但是这个我们都没有学过,还可以自定义输入源,还有一个,这个我们应该见过了,

performSelector:onThread:是不是执行一个方法,在哪儿执行这个方法,我们可以指定位置,我们可以指定在某一个线程的消息循环中,去执行这个方法,这也是一个输入源,我们可以通过它设置一个输入源,输入源是什么,通过performSelector,我们还了解到,输入源,是不是就要做一些事情,Selector,是不是就是一个方法,我们事件,键盘事件,或者点击这个按钮的时候,触发一个事件,这个事件,是不是最终,也要执行一个方法,所以,我们在消息循环中干什么,其实就是执行方法吧,我们在消息循环中,执行这些不同的输入事件,对应的方法,

这些方法执行不执行呢,不一定,还要依赖于另一个内容:

5.消息循环的模式:

通知

通过定时器,复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值