No debe intentar quitar el objeto de sí mismo; es una mala práctica, y en AS3 no puede hacerlo con seguridad.
se puede eliminar (es decir, la recolección de basura) solo si no hay referencias restantes para ese objeto. Como las referencias siempre pasan por valor y el objeto generalmente no tiene conocimiento de las referencias que existen, no puede eliminar el objeto de sí mismo. Lo único útil que puede hacer es crear un método que borre todos los recursos utilizados por una instancia. Tal método servirá como un destructor, pero tendrá que llamarlo manualmente. No olvides que los oyentes de eventos también evitarán la recolección de basura a menos que los elimines.
También hay una diferencia entre delete
'en una propiedad y configurándola en null
. Efectivamente, delete
eliminará una propiedad de una instancia de clase dinámica. Mientras que establecer el valor de la propiedad en null
no eliminará la propiedad, pero borrará cualquier referencia que haya almacenada allí. Por lo tanto, ambas acciones destruirán la referencia que se almacenó en alguna propiedad. Tenga en cuenta que no puede delete
un objeto, solo una propiedad.
Existen ciertos hacks que se pueden utilizar para iniciar la recolección de basura en reproductores flash de 9 y más años. Sin embargo, recientemente, la llamada System.gc()
estuvo disponible, lo cual hace lo mismo. Tenga en cuenta que realmente no puede confiar en el hecho de que en realidad se llamará a GC. Esto depende del reproductor flash.
Volviendo a su pregunta: lanzando el evento y notificando a los padres que algo salió mal, en realidad es una buena idea. Debes apegarte a eso. Además, es mejor si el padre sabrá de tal evento de esa manera, y no cuando descubrirá que algunas propiedades se anularon mágicamente.
P.S .: Reading Grant Skinner articles on memory en flash player es en realidad una buena idea.
"Tenga en cuenta que no puede eliminar un objeto, solo una propiedad". - No estoy seguro de lo que quieres decir con esto. ¿Qué pasa si mi propiedad es un objeto? – Luke
@Luke: me refiero a que la propiedad del objeto A puede contener una referencia a algún objeto B, pero 'delete A.prop' solo eliminará esa propiedad, junto con una referencia. Es decir. A ya no tendrá propiedad 'prop', pero probablemente haya referencias al objeto B dejado en alguna parte. Entonces B no recibirá GC. – dragonfly
'System.gc()' solo está disponible para versiones de depuración de flash player. Debe revisar para mencionar que no debe usarse para otra cosa que no sea la depuración. –