创建和配置Sprite,并TextField如果你是一个单一的框架上创造数十万个,这些在运行时的对象可以是昂贵的。因此,一个常见的技巧是“汇集”这些对象以供以后重用。请记住,我们不仅在尝试优化创建时间(),而且还在优化配置(设置默认属性)。new Sprite()
可以说我们正在使用数百个TextField对象构建一个列表组件。当您需要创建新对象时,请检查是否可以重用现有对象。
var pool:Array = []; if (pool.length > 0){ // 重用现有的TextField var label = pool.pop(); }else{ // 创建一个新的TextField label = new TextField(); // 在这里初始化您的TextField label.setDefaultTextFormat(...); label.multiline= false; label.selectable= false; } // 将TextField添加到支架中,使其出现在屏幕上 // you will need to layout it and set its "text" and other stuff seperately holder.addChild(label);
以后,销毁组件(或将其从屏幕上删除)时,请记住将未使用的标签重新添加到池中。
foreach (var label in allLabels){ label.parent.removeChild(label); // 从父级精灵中删除 pool.push(label); // 添加到游泳池 }
在大多数情况下,最好为每个使用情况创建一个池,而不是全局池。创建全局池的缺点是,您需要每次都重新初始化对象以从池中检索对象,以抵消其他功能所做的设置。这同样昂贵,并且首先否定了使用池的性能提升。