| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> RunLoop系列面试题- 1.什么是RunLoopRunloop和线程的关系 -> 正文阅读 |
|
[移动开发]RunLoop系列面试题- 1.什么是RunLoopRunloop和线程的关系 |
RunLoop基本介绍RunLoop翻译过来就是运行循环,就是保证程序运行的,本质就是个循环,它的目的本质就是为了保活,保护线程的活跃,能处理事件,NSTimer定时器,等等不方便在顺序程序中完成的操作,而它又不同于普通的循环,因为它会休眠,相较于普通循环,它不会不停的占用着cpu gpu资源不放 基本流程:因为它是线程保活用的,所以一个线程对应一个RunLoop,同时保存在一个字典里面,由线程当Key,当创建了线程需要使用就会创建RunLoop对象,线程结束,RunLoop被销毁,手动创建的子线程,不会自动开启RunLoop 代码层面
<CFRunLoop 0x105a2a660 [0x7fff806f0b70]>{wakeup port = 0xd03, stopped = false, ignoreWakeUps = true xxxxx Optional(<CFRunLoop 0x105a2a660 [0x7fff806f0b70]>{wakeup port = 0xd03, stopped = false, ignoreWakeUps = true xxxx RunLoop可以有两种获取方式,其实是同一个东西,只是语言不同,第一个是根据OC改的,是基于NSObject,第二个是基于C的,包装出来是可选项,看地址可以看到,除了调用不同,访问的是同一个RunLoop 从Swift角度来说无疑是CFRunLoop更适合,因为开源+返回的是可选项,更符合Swift的可选链编程 CF系列源码:?Source Browser 所以可以说RunLoop和线程的关系是保证线程活性的一个特殊的循环,主线程是一定有的,子线程如果不使用默认是没有,那么在线程代码执行完毕后,这个线程就会关系,并且在没有开启RunLoop的情况下定时器和延时操作都是无法正常使用的 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 14:57:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |