【问题标题】:How to implement an Object Pool for Flex Data/Item Renderers如何为 Flex 数据/项目渲染器实现对象池
【发布时间】:2010-10-06 07:40:29
【问题描述】:

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

我知道布局虚拟化是一种对象池形式,但我想要一种方法来解决这个问题。例如,当 itemRendererFunction 被分配给具有虚拟化布局的数据组时,项目渲染器的构造确实被推迟了,但实例没有被重用——如果可能的话,我希望能够在那里进行干预。

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

有什么方法可以知道 Flex 何时丢弃项目渲染器实例?我有一种下沉的感觉,就是没有可靠的方法来告诉我——尽管也许应该有。

或者,是否有一种疯狂的 hack 可行(例如将所有渲染器保留在池中并测试它们的舞台属性以确定可用性)?

【问题讨论】:

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


【解决方案1】:

看起来 SkinnableDataContainer 是开始的地方。文档表明 updateRenderer 是可以查看的地方,但它的代码并没有多大作用。

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

【讨论】:

  • 太棒了,这让我走上了正轨。 RendererExistenceEvent.RENDERER_ADD/REMOVE 事件从 DataGroup 调度。
【解决方案2】:

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

【讨论】:

  • itemRenderer 和 itemRendererFunction 都可以通过使用 mx.core.IFactory 来提供实例
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多