6

J'ai une application pour iPhone qui reçoit des informations d'une API (en XML, mais éventuellement JSON). Les objets de résultat sont généralement affichés dans les contrôleurs de vue (tables principalement).NSNotification vs délégués Protocoles?

Voici l'architecture en ce moment.

J'ai des classes NSOperation qui récupèrent les différents objets du serveur distant. Chacune de ces classes NSOperation utilisera une méthode déléguée personnalisée qui relancera les objets résultants lors de leur analyse, et enfin une méthode lorsque plus aucun résultat n'est disponible. Ainsi, le protocole pour les délégués sera quelque chose comme:

(void) ObjectTypeResult:(ObjectType *)result; 
(void) ObjectTypeNoMoreResults; 

Je pense que la solution fonctionne bien, mais je ne finissent avec un tas de protocoles délégués autour et mes contrôleurs de vue doivent mettre en œuvre toutes ces méthodes de délégués . Je ne pense pas que ce soit si mauvais, mais je suis toujours à la recherche d'un meilleur design. Donc, je pense à utiliser NSNotifications pour supprimer l'utilisation des délégués. Je pourrais inclure l'objet dans la partie userInfo de la notification et juste poster des objets tels que reçus, puis un événement final quand il n'y en a plus. Ensuite, je pourrais juste avoir une méthode dans chaque contrôleur de vue pour recevoir toutes les données, même en utilisant plusieurs objets dans un contrôleur. †

Alors, quelqu'un peut-il partager avec moi quelques avantages/inconvénients de chaque approche. Devrais-je envisager de refactoriser mon code pour utiliser les événements plutôt que les délégués? Est-ce que l'un est meilleur que l'autre dans certaines situations? Dans mon scénario, je ne cherche vraiment pas à recevoir des notifications à plusieurs endroits, alors peut-être que les délégués basés sur le protocole sont la voie à suivre.

Merci!

Répondre

5

En fait, votre conception sonne bien. L'approche claire Cocoa utilise des délégués, et est beaucoup préférable de jeter des objets autour. De plus, la définition de vos protocoles rend votre code très explicite et facile à comprendre. Dans l'ensemble: continuez votre bon travail