Llegué a AS3 del mundo JS, y debo confesar que las funciones anónimas son mi debilidad. Tiendo a usarlos en todas partes. Ahora, viniendo a AS3 escuché y leí en muchos lugares, que AS y Flash son enormemente malos en el manejo de recolección de basura, que uno debe vaciar, eliminar y eliminar todos los manejadores de eventos y objetos manualmente para evitar pérdidas de memoria extrañas e inexplicables y colisiones. No estoy seguro de qué parte de esto es cierto, pero me gustaría seguir las mejores prácticas desde el principio.Funciones anónimas como controladores de eventos en Action Script - ¿está bien o mal?
Así que mi pregunta sería: ¿qué tan malo es la idea de usar funciones anónimas como controladores de eventos? Considere, por ejemplo, un código como este:
addEventListener(Event.ENTER_FRAME, function() : void {
controls.elapsed = stream.time;
});
contorls.elapsed es el organismo, que además de ajustar el tiempo de reproducción actual para el reproductor de vídeo, actualiza toda la interfaz de usuario, y corriente es NetStream objeto, que transmite el video real.
Hay muchos otros lugares donde la función anónima puede hacer que el código sea más limpio e intuitivo. Compruebe el siguiente código para el sencillo efecto de aparición gradual de la barra de control:
public function showControls() : void
{
var self:Controls = this;
if (!visible) {
visible = true;
fadeTimer = new Timer(30, 10);
fadeTimer.addEventListener(TimerEvent.TIMER, function() : void {
self.alpha += 0.1;
});
fadeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function() : void {
self.alpha = 1;
});
fadeTimer.start();
}
}
estoy totalmente al igual que cómo se ve y se inscribe en el código, pero estoy preocupado por las fugas. Si bien el controlador Event.ENTER_FRAME probablemente nunca se volvería dañino en esta forma, ¿qué pasa con los escuchas de temporizador? ¿Debo eliminar esos oyentes manualmente, o se eliminarán automáticamente, tan pronto como establezca fadeTimer = null? ¿Es posible eliminar oyentes correctamente con funciones anónimas?
No soy seguidor de las funciones anónimas. Por un lado, son feos, tampoco se puede reutilizar la función en otro lugar (lo que posiblemente conduce a un código duplicado) y, por último, crean un objeto de activación que tiene algunos impactos de rendimiento y memoria. http://onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf – Allan
¿Hay algo en AS que no cause algún impacto en el rendimiento y la memoria? :) Bueno, en mi comprensión, las funciones anónimas solo son útiles, cuando uno no necesita reutilizar esas funciones, no quiere complicar la definición de clase y quiere mantener toda la lógica en un solo lugar. Así es como y cuando tiendo a usarlos. Gracias por el enlace, lo verificaré. – jayarjo
Hmm ... "algún impacto en el rendimiento y la memoria" que en realidad resultó ser una cita. Ahora, ¿qué tipo de declaración es? ¿Qué significa "algo"? Si esto es leído por su significado, entonces "algunos" suena como un valor insignificante. ¿O no? Qué muy vago. – jayarjo