Actualmente estoy aprendiendo sobre WPF y me he topado con el concepto de los eventos débiles, pero realmente estoy luchando para 'obtenerlo'. He leído innumerables artículos sobre Stackoverflow y mirado ejemplos de código, pero simplemente no se hunde en¿Cómo funcionan los eventos débiles?
Aquí está mi dilema:.
- entiendo que cuando un objeto se suscribe a un evento, la fuente de la evento debe contener una referencia al suscriptor.
- También entiendo que si el suscriptor queda fuera del alcance o se destruye explícitamente pero el origen del evento no se destruye, entonces el suscriptor no será basura porque el origen del evento aún conserva una referencia al suscriptor.
- Un método común para evitar esto es suscribir explícitamente al suscriptor de la fuente antes de que se destruya el objeto. Entiendo que esto puede ser un problema si el programador no puede determinar cuándo ocurrirá esto.
Así que de lo anterior entiendo cómo el uso de eventos puede causar pérdidas de memoria y por qué hay una necesidad de un patrón de referencia débil pero lo que me impide entender es cómo el patrón de eventos débiles realmente logra este objetivo ? ¿Qué hace de manera diferente?
Seguramente, incluso si hay una clase que gestiona eventos, todavía tiene que suscribirse y anular la suscripción de los manejadores a/desde la fuente, por lo tanto las referencias deben existir, dando los mismos problemas con la forma estándar de usar eventos.
Alguien por favor explíqueme qué concepto fundamental me falta o no entiendo y ayúdeme a 'obtener' el patrón de evento débil.
@ El enlace ChrisSinclair está abajo :( – SuperJMN
@SuperJMN: Gracias. Aquí hay un enlace actualizado: https://bkiener.wordpress.com/2010/02/11/simple-weak-event-listener-for-silverlight/ –