Cronología, detectores de eventos, limpieza

Si tengo un botón en la línea de tiempo para los primeros fotogramas, pero luego lo elimino...

¿Tengo que preocuparme por eliminar el detector de eventos del botón (MovieClip) si el botón se eliminó del escenario?

Estoy escribiendo una clase de documento aunque estoy usando objetos en la línea de tiempo.

preguntado el 03 de mayo de 12 a las 15:05

Si desea asegurarse de que se recolecte basura, elimine el detector de eventos. -

Hm tiempo para estirar mis fotogramas clave. ¿Hay alguna manera de hacer que una clase elimine sus propios detectores de eventos cuando se elimina un elemento del escenario? -

1 Respuestas

Puede usar el evento removeFromStage para borrar cualquier detector de eventos en su instancia de botón:

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Button extends MovieClip
    {
        public function Button():void
        {
            addListeners();
        }

        private function addListeners():void
        {
            this.addEventListener(Event.ADDED_TO_STAGE, addedHandler);
            this.addEventListener(Event.REMOVED_FROM_STAGE, removedHandler);
            this.addEventListener(MouseEvent.CLICK, clickHandler);
        }

        private function addedHandler(event:Event):void
        {
            trace("button added");
        }

        private function removedHandler(event:Event):void
        {
            trace("button removed");
            removeListeners();
        }

        private function clickHandler(event:MouseEvent):void
        {
            trace("button clicked");
        }

        private function removeListeners():void
        {
            this.removeEventListener(Event.ADDED_TO_STAGE, addedHandler);
            this.removeEventListener(Event.REMOVED_FROM_STAGE, removedHandler);
            this.removeEventListener(MouseEvent.CLICK, clickHandler);

            trace("has added listener: " + this.hasEventListener(Event.ADDED_TO_STAGE)); 
            trace("has removed listener: " + this.hasEventListener(Event.REMOVED_FROM_STAGE));
            trace("has click listener: " + this.hasEventListener(MouseEvent.CLICK));
        }
    }
}

contestado el 03 de mayo de 12 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.