Runloop 学习之 CFRunloopSource
CFRunloopSource
CFRunloopSource 定义
struct __CFRunLoopSource {CFRuntimeBase _base;uint32_t _bits; //用于标记Signaled状态,source0只有在被标记为Signaled状态,才会被处理pthread_mutex_t _lock;CFIndex _order; /* immutable */CFMutableBagRef _runLoops;union {CFRunLoopSourceContext version0; /* immutable, except invalidation */CFRunLoopSourceContext1 version1; /* immutable, except invalidation */} _context;
};
结论:
- 一个 source 可以放在多个 runloop 中
- CFRunLoopSource 是对 input sources 的抽象,它要么是 source0,那么是 source1
Source0
typedef struct {CFIndex version;void * info;const void *(*retain)(const void *info);void (*release)(const void *info);CFStringRef (*copyDescription)(const void *info);Boolean (*equal)(const void *info1, const void *info2);CFHashCode (*hash)(const void *info);void (*schedule)(void *info, CFRunLoopRef rl, CFStringRef mode);void (*cancel)(void *info, CFRunLoopRef rl, CFStringRef mode);void (*perform)(void *info);
} CFRunLoopSourceContext;
- source0 是 App 内部事件,如:UIEvent,CFSocket。
- source0 是基于非 port 的,只包含一个回调(函数指针),并不能主动触发事件。使用时,先调用 CFRunloopSourceSignal(source) 标记为待处理,然后手动调用 CFRunloopWakeUp(runloop) 来唤醒 runloop,让其处理这个事件。
Source1
typedef struct {CFIndex version;void * info;const void *(*retain)(const void *info);void (*release)(const void *info);CFStringRef (*copyDescription)(const void *info);Boolean (*equal)(const void *info1, const void *info2);CFHashCode (*hash)(const void *info);
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET
Runloop 学习之 CFRunloopSource相关推荐
- ios runloop学习
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...
- 整理的一篇iOS面试题大全
#一.基础知识点 1. 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情. 1). MVC模式:Model View Contro ...
- 整理一篇很全面的iOS面试题
(答案不唯一,仅供参考,文章最后有福利) 目录 一.基础知识点 二.第三方框架 三.算法 四.编码格式(优化细节) 五.其他知识点 一.基础知识点 设计模式是什么? 你知道哪些设计模式,并简要叙述? ...
- 历史文件备份,原文件已损失
zzf073的博客 - 第6页 - DevDiv开发者社区 - Powered by DEVDIV.COM! zzf073的博客 - 第4页 - DevDiv开发者社区 - Powered by DE ...
- 我常去逛的iOS干货文章、blog等
俗话说,三人行必有我师焉. 总有些知识别人知道,你是不知道的. 感谢开源,感谢分享.我们学习才不会走太多弯路. 所以才会有如此多的好blog.好文章. 以下网站不分排序. 1.1. 喵神-OneV's ...
- RunLoop的学习
什么是Run Loops RunLoops是与线程相关联的基础部分,一个Run Loop就是事件处理循环,他是用来调度和协调接收到的事件处理.使用RunLoop的目的,就是使的线程有工作需要做的时候忙 ...
- Runloop底层原理--源码分析
什么是Runloop? Runloop不仅仅是一个运行循环(do-while循环),也是提供了一个入口函数的对象,消息机制处理模式.运行循环从两种不同类型的源接收事件. 输入源提供异步事件,通常是来自 ...
- RunLoop总结与面试
之前关于RunLoop只知道一点,最近花时间重新系统的学习了一下,以下是我的学习笔记及总结.有不足的部分,望大佬不吝赐教. 1.RunLoop 概念 计算机处理任务有进程和线程的概念,而在iOS中一个 ...
- iOS底层原理探究-Runloop
Runloop 1. 概述 一般来说,一个线程只能执行一个任务,执行完就会退出,如果我们需要一种机制,让线程能随时处理时间但并不退出,那么 RunLoop 就是这样的一个机制.Runloop是事件接收 ...
最新文章
- 读书-算法《程序设计导引及在线实践》-简单计算题5:装箱问题
- 项目管理其实可以简单一点——任务分工
- java redis 商品秒杀_redis编写lua脚本实现商品秒杀
- 服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...
- 腾讯自动驾驶新动作!与现代合作开发无人车系统
- blog.1z5k.com
- mysql 的相关操作_MySQL(记录相关操作)
- 【MISC怼题入门系列】BUU-MISC-page1
- 功率放大器的设计要点
- VTN_Virtual Tenant Network——虚拟租赁网络
- vue-学生信息管理系统
- 王之泰201771010131《面向对象程序设计(java)》第十三周学习总结
- 水花兄弟(Splash Brothers)
- 从零开始实现放置游戏(一)——游戏设计
- 第三方ZXing库zxing-android-embedded使用及自定义
- ElasticSearch自定义分析器(custom analyzer)
- 2021-2027全球与中国冰球护具市场现状及未来发展趋势
- 赶紧注册你的@live.xx邮箱吧!
- 2022-05-首都师范大学-博弈论-焦宝聪
- X61T L7500割脉超频成功!
热门文章
- 我是曾经的“网瘾少年”,靠自学编程走出了大山
- swift3.0中@escaping 和 @noescape 的含义
- C#获取内存地址的值
- input事件中文触发多次问题研究
- 【音频】Mya Marie Harrison的精品音樂
- 编程c语言中,向上取整函数_C编程中的函数–第3部分
- fpga实现YCbCr422转YCbCr444
- 张一鸣宣布卸任字节跳动CEO,网友:想以个人名义上富豪榜;​腾讯第一季度员工平均月薪7.6万元;谷歌发布自然语言平台LaMDA...
- php yii框架addselect,PHP Yii框架之数据库查询操作总结
- 为什么岳灵珊选择了平之?