вторник, 1 февраля 2011 г.

Удаление всех дочерних DisplayObject-ов в DisplayObjectContainer-е (ActionScript)

function removeAllChilds(container:DisplayObjectContainer):void
{
   while (container.numChildren)
   {
      container.removeChildAt(0);
   }
}

Для того чтобы удаляемые объекты не засирали память, не оставалось покинутых листенеров и запущенных таймеров, а так же другого мусора, рекомендую во всех классах расширяющих DisplayObject реализовать следующий интерфейс:
public interface IDisposable 
{
   function dispose():void;
}

В этом единственном методе можно заключить блок кода который бы делал предсмертные операции по освобождению занятых ресурсов.
Если вы не намерены повторно использовать удаляемые объекты то можно воспользоватся немного модифицированным циклом очистки.
function removeAllChilds(container:DisplayObjectContainer):void
{
   var removableObject:DisplayObject;
   while (container.numChildren)
   {
      removableObject = container.removeChildAt(0);
      if (removableObject is IDisposable)
         (removableObject as IDisposable).dispose();
   }
}

Комментариев нет:

Отправить комментарий