ASDK(texture)

图片来源:
raywenderlich

ASDK(texture)_第1张图片
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源码剖析

你可能感兴趣的:(ASDK(texture))