iOS底层面试题--RunLoop

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

Windows高级调试

Windows高级调试

Mario Hewardt、Daniel Pravat / 聂雪军 / 机械工业出版社 / 2009-5 / 79.00元

本书主要讲解Windows高级调试思想和工具,并涉及一些高级调试主题。本书内容主要包括:工具简介、调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64位调试、事后调试、Windows Vista基础以及应用程序验证器的测试设置等。本书内容详实、条理清楚。 本书适合Windows开发人员、Windows测试人员和Windo......一起来看看 《Windows高级调试》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具