分析facebook的AsyncDisplayKit框架,async-display使用async-transaction
上一篇《分析facebook的AsyncDisplayKit框架中的Transaction的工作原理》介绍了fb的asdk的异步事务ASAsyncTransaction,本篇介绍其在asdk异步如何应用这个异步事务。

这个图的中心点是transaction group连结了两个框架,左边是QuartzCore`CALayer的是display的显示框架,右边是CoreFundation`CFRunLoop的主循环框架。Adsk的将CALayer扩展成ASDisplayLayer,在CALayer的display显示框架中应用异步显示时,将会使用Adsk的事务框架(,ASAsyncTransaction),所有事务都会被集中到一个事务组统一提交。而提交的机会(或者说时间地方)是依赖在RunLoop中的某一个运行阶段。
CALayer使用了异步事务,就会将自身或包含自己的容器(CALayer(ASDisplayNodeAsyncTransactionContainer))登记在异步事务组。
异步事务组,只有一个单例,向RunLoop登记了作为BeforeWaiting和Exit两个运行阶段的观察者。并在观察者通知回调时,提交事务。
如果你熟读CFRunLoop模块的代码并通过调试深入试探过UIKit的执行流,就会清楚BeforeWaiting是在RunLoop处理完source0事件之后,在将进入mach_port等待之前,RunLoop设立的一个观察点。而UIKit有一条事件队列_UIApplicationHandleEventQueue,而这个队列挂接在一个source0上(,CFRunLoopSource0可以被RunLoop发起的事件),例如touch输入就会被post到这个事件(注意与event source的区分)队列中。RunLoop在处理完全部fired的source0后才会到达BeforeWaiting阶段,也就是在UIKit的事件队列处理之后。
异步事务组还向RunLoop登记了在Exit处观察,因为RunLoop可能运行在一次过的模式,在使用了异步事务功能之后,就直接要结束一次性的RunLoop循环,到达Exit。如果没有登记观察这个阶段,异步事务组将可能永远不会有机会提交。
分析facebook的AsyncDisplayKit框架,async-display使用async-transaction的更多相关文章
- 分析facebook的AsyncDisplayKit框架中的Transaction的工作原理
在AsyncDisplayKit框架中有一个_ASAsyncTransaction模块,用于AsyncDiplayNode的异步事务,使用了dispatch_group实现. 主要目的是将operat ...
- [源码分析] Facebook如何训练超大模型---(1)
[源码分析] Facebook如何训练超大模型---(1) 目录 [源码分析] Facebook如何训练超大模型---(1) 0x00 摘要 0x01 简介 1.1 FAIR & FSDP 1 ...
- 《k8s-1.13版本源码分析》-调度器框架
本文原始地址(gitbook格式):https://farmer-hutao.github.io/k8s-source-code-analysis/core/scheduler/scheduler-f ...
- 通过源码分析Java开源任务调度框架Quartz的主要流程
通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...
- [源码分析] Facebook如何训练超大模型 --- (2)
[源码分析] Facebook如何训练超大模型 --- (2) 目录 [源码分析] Facebook如何训练超大模型 --- (2) 0x00 摘要 0x01 回顾 1.1 ZeRO 1.1.1 Ze ...
- [源码分析] Facebook如何训练超大模型 --- (3)
[源码分析] Facebook如何训练超大模型 --- (3) 目录 [源码分析] Facebook如何训练超大模型 --- (3) 0x00 摘要 0x01 ZeRO-Offload 1.1 设计原 ...
- async包 ES6 async/await的区别
最基本的async 包 ApCollection.find({}).toArray(function (err, aps) { var num = 0; async.whilst( function ...
- UML分析AsyncDisplayKit框架-ASMuplexImageNode异步下载时序图。
PS:博客园图片服务器不正常工作,数据上传后服务器返回http500,园方迟迟还没解决. 我从2016-01-18 05:52向园方反馈问题-请问博客园的图片服务器有在正常运行吗,至此时2016-01 ...
- linux 时钟源初步分析linux kernel 时钟框架详细介绍
初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...
随机推荐
- MS09-020 iis6.0提权
漏洞编号:MS09-020 披露日期: 2009/6/9 受影响的操作系统:Windows 2003 x64 sp1 sp2;XP; 测试系统:windows 2003 x64 上传 执行 iis ...
- Qualcomm-Atheros-QCA9377-Wifi-Linux驱动
资源来自:https://download.csdn.net/download/ichdy/10331646 已经下载好了,发现无法使用,本人系统Centos7.2,如果有安装成功,并且可以正常使用的 ...
- Java11新特性 - 新加一些实用的API
1. 新的本机不可修改集合API 自从Java9开始,JDK里面为集合(List/Set/Map)都添加了of和copyOf方法,他们可以来创建不可变的集合. Question1:什么叫做不可变集合? ...
- [.Net Core 3.0从入门到精通]1.笔记简介及.Net Core3.0介绍
文章目的:.Net Core 3.0学习笔记整理与分享. 面向人群:有一定基础的C#开发人员或学习人员(C#语法一定要掌握). 笔者水平:中级C#开发攻城狮(水平有限,写的不对的地方希望大家指正). ...
- jQuery的原生替代
jQuery的原生替代,参考自你不需要jQuery,对其进行了更清晰的总结与分类,现代游览器基本都支持(ie10+以上),只整理了最简洁实用的原生代码,过分累赘的实现没有加入 元素获取 jQuery ...
- OptimalSolution(3)--链表问题(2)进阶
一.环形单链表的约瑟夫问题 二.判断一个链表是否为回文结构 三.将单向链表按某只划分成左边小.中间相等.右边大的形式 四.复制含有随机指针节点的链表 五.两个单链表相交的一系列问题 六.将单链表的每K ...
- MySQL基础篇(2)数据类型
MySQL提供了多种数据类型,主要包括数值型.字符串类型.日期和时间类型. 1.数值类型 整数类型:TINYINT(1字节).SMALLINT(2字节).MEDIUMINT(3字节).INT(INTE ...
- Java基础(38)AbstractMap类
AbstractMap类的子类有HashMap(其子类是LinkedHashMap).TreeMap.EnumMap.WeakHashMap和IdentityHashMap. 1.HashMap (1 ...
- (五)Unity插件生成
1)新建空的AndroidStudio工程,但是新建过程时最小SDK版本要与unity一致,如下图所示,本次操作均为api16 2)创建Library,如下图所示,新建module,然后选择Andro ...
- 如何在python文件中测试sql语句
在manage.py的同级目录下新建一个run.py import os if __name__ == '__main__': #加载Django项目的配置信息 os.environ.setdefau ...