iOS底层面试题--RunLoop

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

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


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

为你推荐:

查看所有标签

码农书籍
Objective-C编程:BigNerdRanch入门经典

Objective-C编程:BigNerdRanch入门经典

[美] Aaron Hillegass / 夏伟频、李骏 / 华中科技大学出版社 / 2012-9-25 / 58.00元

《Objective-C编程》讲述Objective-C编程语言和基本的iOS/Mac开发知识。作者首先从基本的编程概念讲起(变量、条件语句、循环结构等),接着用浅显易懂的语言讲解Objective-C和Foundation的知识,包括Objective-C的基本语法、Foundation常用类、内存管理、常用设计模式等,最后手把手教读者编写完整的、基于事件驱动的iOS/Mac应用。作者还穿插介绍了Objetive-C的高级内容,包括属性、范畴和Block对象等知识。全书篇幅精炼,内容清晰,适合无编程经验的读者入门学习。BigNerdRanch培训系列中文图书网站:http://www.iosprogrammingbook.com/

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具