iOS RunLoop 总结以及相关面试题解答

栏目: IOS · 发布时间: 6年前

内容简介:什么时候使用

Runloop 是事件接收和分发机制的一个实现。是线程相关的基础框架的一部分。一个Runloop就是一个事件处理的循环,用来不停的调度工作及处理输入事件。使用runloop的目的就是让你的线程

RunLoop 的主要目的:

保证程序执行的线程不会被系统终止,如果没有RunLoopUIApplicationMain函数执行完毕之后将直接返回,就是说程序一启动然后就结束,在有工作的时候忙于工作,而没有工作的时候处于休眠状态,
复制代码

什么时候使用 Runloop

当需要和该线程进行交互的时候才会使用Runloop.
复制代码

Runloop Mode

iOS RunLoop 总结以及相关面试题解答

一个 Runloop 可能有几个mode

Runloop Mode 实际上是 Source,Timer 和 Observer 的集合,不同的 Mode 把不同组的 Source Timer Observer 隔绝开来。 Runloop` 在某个时刻只能跑在一个 Mode 下,处理这一个 Mode 当中的 Source,Timer 和 Observer。

苹果文档中提到的 Mode 有五个,分别是:

NSDefaultRunLoopMode :默认的mode,正常情况下都是在这个mode NSConnectionReplyMode NSModalPanelRunLoopMode NSEventTrackingRunLoopMode :使用这个Mode去跟踪来自用户交互的事件(比如UITableView上下滑动) NSRunLoopCommonModes

iOS 中公开暴露出来的只有 NSDefaultRunLoopModeNSRunLoopCommonModesNSRunLoopCommonModes 实际上是一个 Mode 的集合,默认包括 NSDefaultRunLoopModeNSEventTrackingRunLoopMode

Source

即可以唤醒 Runloop 的一些事件。比如用户点击了屏幕,就会创建一个input source。

source0
source1

Timer

我们经常用的 NSTimer 就属于这一类。

Observer

某个observer可以监听 runloop 的状态变化,并作出一定反应。

RunLoop运行流程

经典大图

iOS RunLoop 总结以及相关面试题解答

没有事情的时候, Runloop 处于休眠状态。当外部source将其唤醒后,它会依次处理接收到的timer/source,然后再次进入休眠。

常见的面试题:

Runloop 和线程是什么关系?

每条线程都有唯一的一个与之对应的RunLoop对象;主线程的RunLoop已经自动创建,子线程的RunLoop需要主动创建;RunLoop在第一次获取时创建,在线程结束时销毁

Runloop 的mode作用是什么?

指定事件在运行循环中的优先级的,

线程的运行需要不同的模式,去响应各种不同的事件,去处理不同情境模式。(比如可以优化tableview的时候可以设置UITrackingRunLoopMode下不进行一些操作,比如设置图片等。)

+scheduledTimerWithTimeInterval: 的方式触发的 timer ,在滑动页面上的列表时, timer 会暂停回调, 为什么?

滑动scrollView时,主线程的 RunLoop 会切换到 UITrackingRunLoopMode 这个Mode,执行的也是 UITrackingRunLoopMode 下的任务(Mode中的item),而timer是添加在 NSDefaultRunLoopMode 下的,所以timer任务并不会执行,只有当 UITrackingRunLoopMode 的任务执行完毕,runloop切换到 NSDefaultRunLoopMode 后,才会继续执行timer。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构

数据结构

霍罗威茨 / 机械工业出版社 / 2006-7-1 / 48.00元

《数据结构》(C语言版)针对采用ANSI C实现数据结构进行了全面的描述和深入的讨论。书中详细讨论了栈、队列、链表以及查找结构、高级树结构等功能,对裴波那契堆、伸展树、红黑树、2-3树、2-3-4树、二项堆、最小-最大堆、双端堆等新的数据结构进行了有效分析。《数据结构》(C语言版)对一些特殊形式的堆结构,诸如应用在双端优先队列中的最小-最大堆和双端堆的数据结构以及左高树、裴波那契堆、二项堆等数据结......一起来看看 《数据结构》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试