底层-RunLoop

RunLoop的基本作用 

1、保持程序的持续运行

2、处理APP中的各种事件(比如触摸事件、定时器事件等)

3、节省CPU资源,提高程序性能;该做事时做事,该休息时休息

RunLoop与线程之间的关系

每一条线程都有唯一的一个与之对应的RunLoop对象

Runloop保存在一个全局的Dictionary,线程作为key,Runloop作为value

线程刚创建时没有RunLoop对象,RunLoop会在第一次获取时创建, [NSRunloop currentRunloop]

RunLoop会在线程结束时销毁

自线程的RunLoop已经自动获取(创建),子线程默认没有开启RunLoop

RunLoop的运行逻辑

Source0:触摸事件处理、performSelector:onThread

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

Timer:NSTimer、performSelector:withObject:afterDelay

Observers:用于监听RunLoop的状态、UI刷新(BeforeWaiting,即runloop即将进入休眠时)、AutoreleasePool

运行流程


RunLoop休眠的实现原理

CFRunLoopModeRef

CFRunLoopModeRef代表RunLoop的运行模式

一个RunLoop包含若干个Mode, 每个Mode又包含若干个Source0,Source1,Timer,Observe

RunLoop启动时只能选择其中一种Mode,作为currentMode

如果需要切换Mode,只能退出当前Loop,再重新选择一种Mode进入

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是RunLoop 运行循环 在程序运行过程中循环做一些事情 应用范畴 定时器(Timer)、PerformSe...
    happy神悦阅读 517评论 0 0
  • 手动目录RunLoop 6大响应事件RunLoop 与线程的关系RunLoop状态监听RunLoop 数据结构Ru...
    Engandend阅读 764评论 0 1
  • 什么是RunLoop 顾名思义 运行循环在程序运行过程中循环做一些事情 应用范畴 定时器(Timer)、Perfo...
    Stago阅读 137评论 0 0
  • 面试题: 1.讲讲 RunLoop,项目中有用到吗?2.RunLoop内部实现逻辑?3.Runloop和线程的关系...
    子欣_fd97阅读 660评论 1 3
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,601评论 16 22