ASDK(texture)

图片来源:
raywenderlich

IMG_0964.jpg

主线程中一些比较耗时的操作:

  • 尺寸计算和约束:heightForRowAtIndexPath或者是sizeThatFits
  • 图片解码
  • 绘制
  • 对象生命周期的管理

介绍ASDisplayNode

ASDisplayNode是对UIView的封装,类似于UIView和CALayer的关系。和UIView不同的是,Node默认在后台队列并发进行渲染。

Node容器类

Node真正发挥功效是和以下四个容器类结合的时候:

  • ASViewController :继承自UIViewController,你可以为该控制器提供被管理的Node。
  • ASCollectionNode and ASTableNode :类似于UICollectionView和UITableView
  • ASPagerNode :相比于UIPageViewController,提供更强大的滑动性能。

总结方法-tableNode:nodeBlockForRowAtIndexPath:

  1. ASCellNode类似于UITableViewCell,有一点需要去注意,类似于-tableView:cellForRowAtIndexPath:的方法-tableNode:nodeBlockForRowAtIndexPath:返回值是一个block-ASCellNodeBlock。这是因为ASTableNode内容维护所有的cell,并且为indexPath返回一个block,当它准备好的时候,它能并发初始化所有的Cell。
  2. block中的返回值必须是ASCellNode

总结方法-tableView:

  1. 这个方法取代tableView:heightForRowAtIndexPath
  2. 在ASDK中,所有的ASCellNode负责定义他们自己的size。在该方法中你可以可选的定义一个最小和最大的size为你的cell。

ASRangeController

每一个被这个容器包含的node会有以下三种状态:

  • Preload Range :处于这个状态的node要用来获取model。
  • Display Range :处于这个状态的node要用来绘制文本,图片解码。
  • Visible Range : 处于这个状态的node要用来显示在屏幕上。

Node接口状态(interfaceState)回调

这些node的状态是如何正确的协调工作的?

每个node都有一个interfaceState的属性,所有的node被ASRangeController统一协调更新。

幸运的是我们不需要直接操作node的interfaceState属性,我们只需在 interface state 回调中做出响应即可。

给Node命名

为了在滚动过程中观察每个node的状态,我们可以通过如下方法给node命名:

-tableNode:nodeBlockForRowAtIndexPath:中添加如下方法d

node.debugName = [NSString stringWithFormat:@"cell %zd", indexPath.row];

AsyncDisplayKit 2.0教程:入门

AsyncDisplayKit 2.0教程:自动布局

texture官网
texture翻译
预加载与智能预加载(iOS)

iOS 开发一定要尝试的 Texture(ASDK)

使用 ASDK 性能调优 – 提升 iOS 界面的渲染性能

ASDK源码剖析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容