Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/02/2010, 10:46
Avatar de loncho_rojas
loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Cree un monstruo chupa memoria, que puedo hacer?

Mira.. no he leido ni interpretado tu codigo, pero se a que te refieres con chupar memoria, sobre todo en proyectos grandes.

Para que el Garbage Collector esté activo de manera a eliminar funciones X cuando ya no son requeridas debes declararlo en tu Listener.. alguna vez escribi sobre esto, pero lo unico que recibi fueron palos.

Te pongo un ejemplo para que puedas adaptarlo a tu poyecto, y espero te sirva de modelo con un listener cualquiera:

Código:
botn.addEventListener(tipoEvento.NOMBRE_EVENTO, funcion, userCapture, priority, weakReference);
Bueno, la estructura normal ya la conoces, o sea

intancia.addEventListener... dentro de este listener ponemos el famoso parametro o tipo de evento MouseEvent.MOUSE_DOWN, y luego el nombre de la funcion que invoca, llamale como quieras.

los otros elementos son:

en rojo el userCapture, que nos permitira controlar el flujo de eeventos, pero no se si te sera util ahora, por ende, el parametro debes declaralo por defecto en FALSE

en azul, esta el priority, que nos permite asiganale prioridades segun el orden que queremos organizar nuestros detectores, por lo general va un numero entero, donde a mayor sea el numero, mayor prioridad ganara con respecto a los otros listener.. mientras puedes dejarlo en cero, total, no tienes ese problema

y en verde, tu posible camino de luz, o sea el weakReference, que por defecto viene como FALSE, y activa el Colector de basura en AS 3, y actua cuando ya no se esta referenciando ese listener en el proceso... por lo general ocurrira cuando se detenga la funcion, o se elimine el listener, mediante removeChildAT, o bien un removeEventListener. Como viene en FALSE, debes cambiarlo a True.

La sintaxis de tus listener debe quedar asi:

cl01_al01_btn.addEventListener(MouseEvent.CLICK, click_cl01_al01, false, 0, true);

entonces ya habilitas en Garbage collector para elimnarlo de tu memoria cuando ya no este en uso... asi que estos ultimos parametros te serviran para tal efecto, y actuara de pastilla de chikitolina para tu monstruo.

Espero te sirva.. lo quite de algunos libros, y la documentacion de adobe, cuando tuve un problema similar
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...