初识runloop

作者: 嗯o哼 | 来源:发表于2020-07-10 17:43 被阅读0次

一、什么是runloop

顾名思义,运行循环。
按照正常的逻辑,一段代码由上到下依次执行,执行完毕后,程序退出。
对于我们的app来说,我们希望它一直在运行,等待用户的交互,并作出响应。那么就需要重复的执行代码。
相当于一个do...while 循环

没错runloop就是做这件事的。在程序的主入口 main 函数中将我们的代码包裹再while 循环中。就保证了,程序的可持续性。

那么runloop都做了哪些事情,仅仅是单纯的一个循环吗,有什么优化呢?

二、runloop的基本作用

程序运行的过程中,当没有任何交互的时候,我们希望程序,处于休眠状态,不进行任何的处理,仅仅是停留在最后一次显示的界面中。当用户点击界面进行操作的时候,激活程序,执行任务,那么runloop可以大概有一下几个作用

1.保持程序的运行状态
2.处理app的各种事件
3.节省cpu的资源,提高程序的性能。该做事的时候,做事,该休息的时候休息

三、runloop的数据结构

oc中runloop有两套API

C语言的API CFRunLoopRef ,C语音的runloop 是开源的,下载地址 https://opensource.apple.com/tarballs/CF/
OC语言的API NSRunLoop,它是对C语言的一层封装,为OC对象

1.runloop的获取方法

C
CFRunLoopRef runloop = CFRunLoopGetCurrent();
OC
NSRunLoop *currentRunloop = [NSRunLoop currentRunLoop];

2.runloop相关的类

1.CFRunLoopRef 是C语言的__CFRunLoop结构体类型
2.CFRunLoopModeRef 是C语言的 __CFRunLoopMode结构体类型,内部包含 source/timer/observer等
3.CFRunLoopSourceRef 主要用于系统事件
4.CFRunLoopTimerRef 定时器相关
5.CFRunLoopObserverRef 通知相关

四、runloop与线程的关系

1.每条线程都有唯一一个runloop与之对应,保存在一个全局的字典中,以线程为key,runloop为value
2.runloop是在第一次获取的时候创建,子线程中的runloop默认是没有开启的,因为我们没有获取过它
3.主线程中的runloop 是已经创建好了,因为在UIApplicationMain入口函数中,获取的时候创建好了
4.runloop在线程结束的时候销毁

关于runloop更多的内容,还是需要从源码入手。了解更多的runloop知识,深刻理解,有助于开发中,关于runloop的应用。

相关文章

  • 初识RunLoop

    初识RunLoop 1.RunLoop的作用A 保持程序的持续运行(ios程序为什么能一直活着不会死)B 处理Ap...

  • Runloop初识

    一、作用: 1.保证程序持续运行 处理APP中的各种事件(如触摸事件、定时器事件、Selector事件) 节约cu...

  • 初识 RunLoop

    字面理解:运行循环,相当于在跑圈(400米) 基本作用: 1.保持程序的持续运行(就像我们运行一个程序,就会开启一...

  • RunLoop 初识

    0x00 RunLoop 是什么? 在程序运行的过程中循环做的一些事情, 保证 main 函数不会直接退出, 并处...

  • 初识runloop

    一、什么是runloop 没错runloop就是做这件事的。在程序的主入口 main 函数中将我们的代码包裹再wh...

  • 深入浅出 RunLoop(五):RunLoop 与 NSTime

    RunLoop 系列文章 深入浅出 RunLoop(一):初识深入浅出 RunLoop(二):数据结构深入浅出 R...

  • 深入浅出 RunLoop(四):RunLoop 与线程

    RunLoop 系列文章 深入浅出 RunLoop(一):初识深入浅出 RunLoop(二):数据结构深入浅出 R...

  • 深入浅出 RunLoop(三):事件循环机制

    RunLoop 系列文章 深入浅出 RunLoop(一):初识深入浅出 RunLoop(二):数据结构深入浅出 R...

  • 深入浅出 RunLoop(一):初识

    RunLoop 系列文章 深入浅出 RunLoop(一):初识深入浅出 RunLoop(二):数据结构深入浅出 R...

  • 深入浅出 RunLoop(二):数据结构

    RunLoop 系列文章 深入浅出 RunLoop(一):初识深入浅出 RunLoop(二):数据结构深入浅出 R...

网友评论

    本文标题:初识runloop

    本文链接:https://www.haomeiwen.com/subject/nsvjzhtx.html