内容简介:1、什么是RunLoop?2、RunLoop与线程关系?3、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的运行逻辑?
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS底层面试题---OC语法部分
- 面试必问:HashMap 底层实现原理分析
- Redis 面试热点之底层实现篇(一)
- Redis 面试热点之底层实现篇(二)
- 200道iOS面试题面试题整理,底层、技术亮点公司需要的这里都有
- 拜托!面试请不要再问我Spring Cloud底层原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
垃圾回收算法手册:自动内存管理的艺术
Richard Jones、Eliot Moss、Antony Hosking / 王雅光、薛迪 / 机械工业出版社 / 2016-3 / 139
在自动内存管理领域,Richard Jones于1996年出版的《Garbage Collection:Algorithms for Automatic Dynamic Memory Management》可谓是一部里程碑式的作品。接近20年过去了,垃圾回收技术得到了非常大的发展,因此有必要将该领域当前最先进的技术呈现给读者。本书汇集了自动内存管理研究者和开发者们在过去50年间的丰富经验,在本书中......一起来看看 《垃圾回收算法手册:自动内存管理的艺术》 这本书的介绍吧!