Je suis en train d'apprendre WPF et je suis tombé sur le concept des événements faibles, mais j'ai vraiment du mal à le comprendre. J'ai lu d'innombrables articles sur Stackoverflow et regardé des exemples de code, mais je n'arrive pas à comprendre.
Voici mon dilemme :
- Je comprends que lorsqu'un objet s'abonne à un événement, la source de l'événement doit détenir une référence à l'abonné.
- Je comprends également que si l'abonné sort du champ d'application ou est explicitement détruit mais que la source d'événement n'est pas détruite, l'abonné ne sera pas ramassé car la source d'événement conserve une référence à l'abonné.
- Une méthode courante pour éviter cela consiste à désabonner explicitement l'abonné de la source avant la destruction de l'objet. Je comprends que cela peut poser un problème si le programmeur n'est pas en mesure de déterminer quand cela se produira.
Donc, à partir de ce qui précède, je comprends comment l'utilisation d'événements peut provoquer des fuites de mémoire et pourquoi il est nécessaire d'utiliser un modèle de référence faible, mais ce qui m'empêche de comprendre, c'est comment le modèle d'événement faible atteint réellement cet objectif ? Que fait-il différemment ?
Il est certain que même s'il existe une classe qui gère les événements, elle doit toujours abonner et désabonner les gestionnaires à la source, d'où l'existence de références, ce qui pose les mêmes problèmes que la manière standard d'utiliser les événements.
Quelqu'un pourrait-il m'expliquer quel concept fondamental me manque ou m'échappe et m'aider à "comprendre" le modèle d'événement faible ?