Modèle d'événement faible dans MonoTouch

J'avais l'habitude de développer des applications iOS en utilisant le langage Objective-C, et je dealloc sur la méthode dealloc pour effectuer certaines tâches de nettoyage / déslogging dans mon application. Maintenant sur le MonoTouch (ordures collectées) ce n'est plus une option.

Supposons que j'ai un UIViewController qui ajoute comme sous-vue de sa propriété View une instance de MyView (sous-class UIView ). MyView s'enregistre lui-même pour recevoir certains events d'un autre gestionnaire / object global afin qu'il sache se mettre à jour en conséquence (par exemple: onlineProfilesManager.Refreshed += () => <update UI with the new state>; ).

Tant que MyView est à l'écran, tout va bien. Cependant, je dois savoir quand il est supprimé de l'écran afin que je puisse MyView du gestionnaire d'events.

En Obj-C, cela peut être fait simplement dans la méthode dealloc car lorsque l'écran change, UIViewController est désalloué -> MyView est retiré de sa vue d'set, puis la méthode dealloc MyView est appelée.

Dans Monotouch, je n'ai plus ce stream «déterministe». J'ai essayé de mettre quelques instructions d'printing dans les destructeurs UIViewController et MyView mais ils ne sont jamais appelés (la raison en est que MyView est toujours enregistré pour le gestionnaire d'events, car je ne sais pas quand / comment le MyView , il ne sera jamais désaffecté).

Est-ce que quelqu'un sait quel est le «model» pour gérer de telles situations dans MonoTouch? Je pense qu'il me manque un concept fondamental et que j'ai des problèmes pour développer mes applications.

Merci d'avance.


EDIT Je suis en train d'éditer ma question parce que la solution à mon problème est d'utiliser le Weak Event Pattern mais je n'ai pas trouvé d'implémentation pour la plateforme MonoTouch.

Est-ce que quelqu'un sait comment puis-je utiliser le motif d'événement faible dans MonoTouch?

La meilleure façon de gérer les events est de les désinscrire dans ViewWillDisappear et de les save dans ViewWillAppear. Cela signifie que vous ne pouvez pas utiliser des methods anonymes car vous n'avez pas de reference à la méthode pour l'annuler.

Si cela ne correspond pas à ce dont vous avez besoin, vous pouvez faire quelque chose de similaire à cela http://sgmunn.com/blog/2012/05/non-gcd-event-handlers/

À votre santé.

Si vous searchz des events faibles, vous pouvez essayer mon implémentation "Messenger" ici .

Il est inspiré par ce qui est disponible dans TinyIoC , mais je l'ai ré-implémenté pour qu'il utilise less de reflection, etc.