Quels sont les avantages et les inconvénients de chacun d'eux?
Où devrais-je les utiliser spécifiquement?
Réponses
Trop de publicités?La règle de base est le nombre de clients qui aimeraient être informés d’un événement. S'il s'agit principalement d'un objet (par exemple, pour supprimer une vue ou pour agir sur un bouton sur lequel vous avez cliqué, ou pour réagir à un téléchargement ayant échoué), vous devez utiliser le modèle de délégué.
Si l'événement que vous émettez peut intéresser plusieurs objets à la fois (par exemple, rotation de l'écran, utilisation de la mémoire, connexion / déconnexion d'un utilisateur), vous devez utiliser NSNotificationCenter
.
Les notifications sont généralement meilleures pour notifier à l'interface utilisateur que des modifications surviennent également sur d'autres threads. La documentation d'Apple déconseille fortement l'utilisation de délégués sur plusieurs threads, dans la mesure du possible, pour des raisons de stabilité et de performances. Sur le Mac, ils suggèrent d'utiliser des liaisons, mais comme elles n'existent pas sur l'iPhone, les notifications sont probablement votre prochain meilleur pari.
Compte tenu du rendement est une bonne idée (délégation de mieux pour le petit nombre de la notification des objets, le centre de notifications de mieux pour un plus grand nombre d'objets, ou est-il? exécuter un profiler) mais je pense qu'un facteur plus important puisque vous parlez de Objective-C et moins susceptibles de parler de la très haute performance de certaines parties de votre base de code, et qui sont susceptibles d'être écrit en C, est de réduire le temps de compilation des dépendances entre les modules.
Il n'y a rien pour vous empêcher de vous avoir un tableau de délégués plutôt que d'un seul délégué.
Je pourrais utiliser NSNotificationCenter uniquement pour l'état de tout le réseau de composants de pile je fais et tous les appareil de surveillance de l'état des interfaces. Mais pour la plupart de couplage, de ne pas le faire avec la situation mondiale de l'app, je pense que c'est plus clair pour l'utilisation normale des contrats d'interface en Objective-C dans la plupart des cas et plus facile à suivre pour les gens qui viennent après vous, plutôt que d'utiliser NSNotificationCenter. En fait je n'ai jamais utilisé NotificationCenter pour mes propres événements et préfèrent utiliser des délégués pour la facilité du code de la compréhension par quelqu'un d'autre à la lecture de mon code.
Et enfin, bien sûr, avec des notifications vers/à partir de l'API standard, vous n'avez pas le choix et devez utiliser celui des deux méthodes Apple proscrire pour un événement donné.
Les notifications sont meilleures pour découpler les composants de l'interface utilisateur. Il vous permet de brancher n’importe quelle vue sans aucune modification dans vos contrôleurs ou modèles. Certainement mieux pour la conception à couplage lâche.
Mais pour la performance entre la délégation et la notification, vous devez réfléchir à la fréquence de l'appel.
La délégation peut être préférable pour les événements plus fréquents, les notifications pour les événements moins fréquents, mais pour davantage de destinataires. C'est à projeter quoi choisir.