iOS底层面试题--RunLoop

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

内容简介:1、什么是RunLoop?2、RunLoop与线程关系?3、RunLoop的运行逻辑?
iOS底层面试题--RunLoop
面试题的答案都是抛砖引玉,具体细节还得深入了解iOS底层原理
复制代码

1、什么是RunLoop?

  • 顾名思义: 1、运行循环,在程序运行过程中循环做一些事情。 2、iOS中有2套API来访问和使用RunLoop √ Foundation:NSRunLoop √ Core Foundation:CFRunLoopRef 3、NSRunLoop和CFRunLoopRef都代表着RunLoop对象 4、NSRunLoop是基于CFRunLoopRef的一层OC包装 5、CFRunLoopRef是开源的

  • RunLoop的基本作用: 1、保持程序的持续运行 2、处理App中的各种事件(比如触摸事件、定时器事件等) 3、节省CPU资源,提高程序性能:该做事时做事,该休息时休息 ......

  • CFRunLoopModeRef √ CFRunLoopModeRef代表RunLoop的运行模式 √ 一个RunLoop包含若干个Mode,每个Mode又包含若干个Source0/Source1/Timer/Observer √ RunLoop启动时只能选择其中一个Mode,作为currentMode √ 如果需要切换Mode,只能退出当前Loop,再重新选择一个Mode进入 √ 不同组的Source0/Source1/Timer/Observer能分隔开来,互不影响 √ 如果Mode里没有任何Source0/Source1/Timer/Observer,RunLoop会立马退出 √ kCFRunLoopDefaultMode(NSDefaultRunLoopMode):App的默认Mode,通常主线程是在这个Mode下运行 √ UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响

  • 应用范畴: √ 定时器(Timer)、PerformSelector √ GCD Async Main Queue √ 事件响应、手势识别、界面刷新 √ 网络请求 √ AutoreleasePool

  • RunLoop在实际开中的应用 √ 控制线程生命周期(线程保活) √ 解决NSTimer在滑动时停止工作的问题 √ 监控应用卡顿 √ 性能优化

2、RunLoop与线程关系?

  • 每条线程都有唯一的一个与之对应的RunLoop对象
  • RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value
  • 线程刚创建时并没有RunLoop对象,RunLoop会在第一次获取它时创建
  • RunLoop会在线程结束时销毁
  • 主线程的RunLoop已经自动获取(创建),子线程默认没有开启RunLoop

3、RunLoop的运行逻辑?

iOS底层面试题--RunLoop
3.1、各种事件解析
  • Source0 触摸事件处理 performSelector:onThread:

  • Source1 基于Port的线程间通信 系统事件捕捉

  • Timers NSTimer performSelector:withObject:afterDelay:

  • Observers 用于监听RunLoop的状态 UI刷新(BeforeWaiting) Autorelease pool(BeforeWaiting)

3.2、运行逻辑01、通知Observers:进入Loop 02、通知Observers:即将处理Timers 03、通知Observers:即将处理Sources 04、处理Blocks 05、处理Source0(可能会再次处理Blocks) 06、如果存在Source1,就跳转到第8步 07、通知Observers:开始休眠(等待消息唤醒) 08、通知Observers:结束休眠(被某个消息唤醒) 01> 处理Timer 02> 处理GCD Async To Main Queue 03> 处理Source1 09、处理Blocks 10、根据前面的执行结果,决定如何操作 01> 回到第02步 02> 退出Loop 11、通知Observers:退出Loop


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

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

精通Spring 4.x

精通Spring 4.x

陈雄华、林开雄、文建国 / 电子工业出版社 / 2017-1-1 / CNY 128.00

Spring 4.0是Spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。Spring 4.0引入了众多Java开发者翘首以盼的基于Groovy Bean的配置、HTML 5/WebSocket支持等新功能,全面支持Java 8.0,最低要求是Java 6.0。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java W......一起来看看 《精通Spring 4.x》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具