AsyncDisplayKit的基本使用单元是node. ASDisplayNode是一个UIView层之上的封装,就像UIView是对CALayer的封装一样。跟View不一样的是,node是线程安全(比如uiview的操作就不是线程安全的,在非UI线程无法操作UIView)的,就是说你在非主线程对node进行初始化以及配置它们的层级操作都是安全的。
为了让用户界面平滑并且随时可以相应,app需要一秒渲染60帧, 这在iOS上是一个非常好的效果。这意味着主线程有1/60s的时间来放置各个frame,也就是说是在用16ms来执行所有的布局以及绘制代码。并且由于系统overhead,你那些改变布局的代码实际上只有10ms的时间来执行。
AsyncDisplayKit让你把image的解码,text sizing和渲染,以及其他的在费时的UI从左放置在了其他线程。(在使用view的时候,这些操作都只能放置在UI线程)
Nodes 作为view的替代
如果你非常熟悉view的使用方式,那么你已经知道如何使用nodes了。node的API跟UIView是非常相似的并且拥有一些便利。你也可以直接获得layer的属性,为一个view或者layer层级增加一个node,可以直接使用node.view或者node.layer。
AsyncDisplayKit的核心组件包括:
ASDisplayNode 与UIView对应 — 用来扩展生成定制的nodes
ASControlNode 类似UIControl —- 用来扩展生成buttons.
ASImageNode 类似UIImageView —– 异步的图像解码
ASTextode 类似UITextView —— 在TextKit上支持所有的富文本特性
ASTableView和ASCollectionView —— UITableView和UICollectionView的扩展来支持nodes.
你可以用这些相关的类来替代相应的UIKit中对应的类,这样会带来性能上的提高。
GitHub地址:点击打开链接