如何为Flex数据/项呈示器实现对象池

时间:2010-10-06 07:40:30

标签: flex actionscript-3 flex4 itemrenderer object-pooling

您可以轻松地创建Flex 4项目渲染器(通过itemRenderer或itemRendererFunction),允许您从自定义对象池中提取渲染器,但是如何将这些渲染器放回池中呢?

我知道布局虚拟化是一种对象池形式,但我想要一种方法来实现它。例如,当itemRendererFunction已分配给具有虚拟化布局的数据组时,项目渲染器构造确实是延迟的,但实例不会被重复使用 - 如果可能的话,我希望能够进行干预。

但即使在普通虚拟化渲染器(实例 重新循环)的情况下,能够手动管理池仍然很有用。例如,可以在数据组之间共享池,以减少填充每个组所需的初始缓冲区。

有什么方法可以知道Flex何时丢弃项目渲染器实例?我有一种沉闷的感觉,即没有可靠的方法可以告诉 - 即使可能应该有。

或者,是否存在可以正常工作的疯狂黑客(比如将所有渲染器保留在池中并测试其舞台属性以确定可用性)?

2 个答案:

答案 0 :(得分:1)

看起来像SkinnableDataContainer是一个开始的地方。文档建议updateRenderer是值得关注的地方,但它的代码并不多。

它还会调度RendererExistenceEvent.RENDERER_ADD和RendererExistenceEvent.RENDERER_REMOVE事件,如果您想要捕获正在发生的事情,可能值得一听。

答案 1 :(得分:0)

这是一个非常有趣的问题,RENDERER_REMOVE看起来是在使用后在池中存储实例的好方法。但是我没有看到如何使用itemRenderer或itemRendererFunction为数据组提供INSTANCES(而不是类)......