智能预加载
学习自Texture官方文档
虽然异步并发渲染和FlexBox布局已经足够强大,但是Texture还做了另外的智能预加载的思想
我们通常不在node container
外使用node,因为所有的node都有当前的interface state
概念。
interface state
属性由ASRangeController
更新和维护,ASRangeController又由所有的node container
在内部创建和维护。
当我们在contain外部使用node时,就不会有ASRangeController
更新其状态,这个有时会导致渲染时node闪烁,这是因为这些容器外的节点因为状态的错误,在节点被渲染到屏幕上后又进行了一次渲染。
接口状态范围
当nodes添加到滚动或者分页界面时,会处在上面所处的几个状态之一。意味着当视图滚动时,他们的状态将会更新
Preload: 预加载,离可见区域最远的内容,在这个地方收集其他的输入源信息
Display: 在这个地方展示例如文字光栅化、图片解码等任务
Visible: 在屏幕上展示至少一个像素
ASRangeTuningParameters
这些状态范围的大小是可调整的。默认大小适合于大多数情况,我们也可以设置滚动范围参数调整其大小
在下面图片中我们可以看到,当用户向下滚动时,滚动方向的范围比尾部方向内容大得多。当用户改变滚动方向时,则首尾将会动态交换,以保持内存最佳使用率。这使得我们只需要关系首尾方向的range size大小,而不需担心用户更改滚动方向
接口状态回调
当用户滚动时 node会在这三个状态范围中切换 并且通过加载数据或者渲染做出反应。自己的node子类可以通过实现相应的回调方法来利用这种机制
-didEnterVisibleState
-didExitVisibleState
-didEnterDisplayState
-didExitDisplayState
-didEnterPreloadState
-didExitPreloadState
//记得都要调用super