4

如何以及为什么要在 libGDX 中使用Pool ?官方开发指南中没有关于此类的任何内容,除了在某些示例中使用它。

4

1 回答 1

7

Pool类是避免垃圾收集开销的优化。缺点是必须手动管理池中的对象(您必须记住释放它们以便它们可以重用),并且您的对象必须是可重用的(final例如,通常没有字段)。

在 libGDX 中,Pool该类用于在每个帧上分配的对象(如动作和事件)。

您可以为自己的代码忽略 Pool,直到遇到生成太多垃圾的问题。

如何使用游泳池

APool<>管理单一类型的对象,因此它由该类型参数化。对象通过调用从特定Pool实例中获取obtain,然后应该通过调用返回到池中free。池中的对象可以选择实现Pool.Poolable接口(只需要reset()存在一个方法),在这种情况下,Pool当对象返回池时会自动重置对象。对象最初是按需分配的(因此,如果您从不调用obtain,则 Pool 将不包含任何对象)。

您必须实现自己的子类,Pool<>因为该newObject方法是抽象的。

泳池注意事项

小心泄露对 Pooled 对象的引用。仅仅因为您在 Pool 上调用“free”并不会使任何未完成的引用无效。如果您不小心,这可能会导致细微的错误。如果将对象放入池中时对象的状态未完全重置,您还可以创建细微的错误。

于 2013-02-15T05:44:50.030 回答