Вы, кажется, неправильно понимаете сферу.Я попытаюсь объяснить, что вы делаете:
function cleanup(mc):void {
removeChild(mc.parent.getChildByName(mc.name)); // removes the "clip" sprite
mc = null; // nulls the local var "mc", which essentially does nothing
addChild(clip); // re-add the "clip" sprite
removeChild(clip) // remove the "clip" sprite
clip = null; // null the "clip" sprite, removing the last reference to the memory allocated for the sprite
}
Обычно, когда вы создаете Sprite
, вы выделяете память, необходимую для Sprite
, и назначаете ее для * 1006.* переменная.Ваш спрайт теперь имеет одну ссылку на него.
Затем вы добавляете его на сцену.Это создает новую ссылку, поэтому у вашего спрайта теперь есть 2 ссылки.Вот и все.
Переменная mc
в функции cleanup()
является временной переменной - они очищаются после выхода из функции, поэтому вам не нужно об этом беспокоиться.Чтобы пометить ваш Sprite
для сборки мусора, вам нужно удалить 2 ссылки на него: переменную clip
и сцену.Так что вам просто нужно сделать:
clip.parent.removeChild( clip );
clip = null;
И это сделано.
Проверьте, что: http://divillysausages.com/blog/tracking_memory_leaks_in_as3 (заявление об отказе: мой сайт), которое должно дать вам хорошее объяснениекак память работает в as3
Edit Обычно вы работаете на основе классов.Во всех моих классах я реализую функцию destroy()
, которую я могу вызывать для очистки класса (удаление дочерних элементов, прослушивателей событий, любых ссылок на другие объекты и т. Д.).Для кода, вызывающего destroy()
, его не волнует, что делает объект или как он работает, он просто знает, что впоследствии этот объект хорош для сборки мусора.
Как правило, объект, создающий что-тотакже несет ответственность за его уничтожение.