谈一谈对RunLoop的理解

2017-03-25  本文已影响0人  鸡蛋不吃黄

Runloop理解:

每个线程都有一个消息循环—>消息循环监听着输入事件—>事件有两种类型—>输入源和定时源—>将创建好的输入源以确定的模式加入消息循环中 —> 由于子线程消息循环默认不开启, 所以线程中无法监听到是否有方法需要其执行,就会销毁,导致方法执行不到 —> 需要开启子线程的消息循环 —> 三种开启方法, run开启了无法关闭, runUntilDate虽然开启了确定的时间也不靠谱 , 苹果提供了判断模式,点击run 右边帮助栏查找. RunLoop是时间循环,负责监听事件,保证应用程序持续运行。监听到事件后,向注册的对象发送消息,从而实现事件响应

Runloop(消息循环)的目的

保证程序不退出负责处理输入事件

事件类型如下:
如果没有事件发生, 会让程序进入休眠状态,通俗的讲,runloop主要就是为保证程序在执行过程中不会被系统终止,确保不断的监听用户交互行为

runloop的运行循环模式:

有5种模式
第一种就是默认模式: 也就是一般的方法调用使用的模式。
第二种就是跟踪模式: 用于scrollview追踪触摸滑动, 使其不受其他模式的影响, 可以共存。
第三种就是当程序启动时第一次开启的运行循环模式。
第四种的话 一般开发中没听到过。没有去研究过。
第五种是一种占位模式。不过没什么太大用处。
系统默认注册了5个Mode:

NSDefaultRunLoopMode:App 的默认 Mode,通常主线程是在这个 Mode 下运行(默认情况下运行)
UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响(操作 UI 界面的情况下运行)
UIInitializationRunLoopMode:在刚启动 App 时进入的第一个 Mode,启动完成后就不再使用
GSEventReceiveRunLoopMode:接受系统事件的内部 Mode,通常用不到(绘图服务)
NSRunLoopCommonModes:这是一个占位用的 Mode,不是一种真正的 Mode (RunLoop无法启动该模式,设置这种模式下,默认和操作 UI 界面时线程都可以运行,但无法改变 RunLoop 同时只能在一种模式下运行的本质)

Runloop本质:

其实是一个结构体。里面有observer。nstimer。source(监听事件的)等等

上一篇下一篇

猜你喜欢

热点阅读