2009-07-07 11 views
1

Juste pour donner un aperçu de ma situation, j'ai un gestionnaire singleton qui tire les données d'un serveur web et donne accès aux données téléchargées. J'ai plusieurs types de vues qui consommeront ces données, mais une seule vue à tout moment devra recevoir des événements.Meilleures pratiques pour les singletons et les notifications sur l'iPhone

Je me demandais juste ce que les gens préfèrent utiliser quand ils ont besoin d'obtenir des événements d'un singleton. Utilisez-vous NSNotificationCenter, Target/Action ou delegate?

Merci pour toute aide.

Répondre

4

Êtes-vous vraiment, vraiment sûr qu'une seule vue doit recevoir des événements? Par exemple, vous n'avez pas une vue principale qui aurait besoin d'accéder à la même mise à jour qu'une sous-vue a été notifiée?

Si vous n'avez vraiment qu'un contrôleur de vue nécessitant des mises à jour à la fois, je pourrais utiliser une approche de délégué. Voici quelque chose à considérer: que se passe-t-il si vous êtes en train de recevoir une mise à jour et que l'utilisateur change d'écran ... est-ce correct? Voulez-vous annuler la demande?

Si vous avez plusieurs problèmes, ou si ce scénario de délégué en cours de modification présente des problèmes, il se peut que vous ayez une notification à laquelle tout le monde peut s'attendre. Il est préférable de garder la notification allumée avec une sorte de référence au changement et de demander au récepteur de rechercher les données modifiées.

+0

Merci, je n'ai même pas pensé à ce qui se passerait si les écrans passaient d'un appel à l'autre. Merci à Mark pour sa réponse. – Meroon

3

S'il y a un grand nombre d'événements, vous devez rester à l'écart de NSNotifications. Pour la plus petite quantité d'overhead je irais avec le modèle de délégué, bien que je ne pense pas que la cible/action a beaucoup plus de frais généraux que les délégués. Essayez votre manière préférée et s'il y a un problème de profil ou essayez une approche différente.

Je commence généralement avec le plus facile à mettre en œuvre. Par exemple, j'ai déjà essayé d'utiliser des notifications pour un code d'interface que j'avais écrit il y a des années, mais avec 30 à 60 mises à jour par seconde, l'interface s'est enlisée de façon inacceptable.

Questions connexes