如何以及为什么要在 libGDX 中使用Pool ?官方开发指南中没有关于此类的任何内容,除了在某些示例中使用它。
问问题
4942 次
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 回答