Actualizado, respuesta correcta
Mi respuesta original estaba mal y sinceramente disculpas. Dejaré intactos todos mis comentarios condescendientes y la información para que la vergüenza siempre me recuerde que nunca confíe en nada que Adobe diga de nuevo. La documentación actual ahora dice:
"Si ya no necesita un detector de eventos, elimínelo llamando a removeEventListener(), o podrían surgir problemas de memoria. Los receptores de eventos no se eliminan automáticamente de la memoria porque el recolector de elementos no utilizados elimina el oyente mientras exista el objeto de envío (a menos que el parámetro useWeakReference esté establecido en verdadero). "
Tenga en cuenta que los detectores de eventos SON el tiempo de recogida de basura hay una referencia débil o no, siempre que el objeto de envío se elimine primero. Entonces, en ambos casos, nunca causarán una pérdida de memoria. Solicito al OP que anule mi respuesta como correcta y le doy a @Malyngo el crédito/respuesta correcta + votos ascendentes.
original (mal) y la respuesta (des) información Sigue
Tanto haría. El enlace de un detector de eventos crea una referencia fuerte al objeto original y, por lo tanto, el recolector de elementos no lo limpiará. Debe eliminar los detectores de eventos explícitamente o especificarlos como referencias débiles, que debería ser uno de los parámetros de addEventListener.
Para las personas que sostienen que los oyentes no se detendrán otros objetos de ser basura recogida
http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/
Resumen del artículo:
"Imaginemos que nuestro jugador muere, y lo queremos Sin embargo, el oyente del evento crea una referencia desde el escenario hacia el reproductor. El escenario es el objeto de visualización superior y siempre está accesible. Por lo tanto, cuando se ejecuta el proceso de barrido de marca, este detector de eventos permite al recolector de basura hop fr om el escenario de nuestro objeto jugador, incluso si hemos borrado todas las demás referencias y lo eliminamos de la lista de visualización ".
De modo que todavía hay al menos un escenario en el que un detector de eventos solo, fuertemente enlazado, puede evitar la recopilación de un objeto.
solución de mejores prácticas:
1) quitarlo de la lista de visualización.
2) Si es un MovieClip, dile que se detenga().
3) Elimine cualquier detector de eventos que el objeto haya creado.
4) Borre las referencias en los objetos principales al establecerlos como nulos.
actualización de nuevo
una pérdida de memoria no significa necesariamente verá la memoria aplicaciones crecen continuamente. Una pérdida de memoria también puede describir simplemente la memoria que se asigna y persiste durante la vida de la aplicación, cuando debe reciclarse. Algo como este código de prueba no será fácilmente detectable. Pero haz que esto suceda N veces durante un juego de una hora de duración y te garantizo que se mostrará. Tuve la misma situación con un algoritmo de encriptación que escribí una vez. Después de un tiempo, mi aplicación comenzó a moverse a 10 o menos fotogramas por segundo, porque la máquina virtual había consumido una tonelada de memoria que en realidad ya no estaba usando, pero todavía estaba administrándola.
Ninguno está causando una pérdida de memoria en este punto, ya que puede necesitar que se pueda hacer clic en todos los 1000 clips de película.Solo cuando haya terminado con los clips de película y desee eliminarlos de la memoria, entrará en juego el problema del detector de eventos. La respuesta de Ascention es correcta, pero la palabra 'would' es importante. – crooksy88
Todos aquí, soy corregido. Nunca volveré a confiar en la documentación de adobe. Ver mi respuesta actualizada. Mi respuesta actual es incorrecta. –