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.