Il m'arrive fréquemment de l'écriture de "l'utilité" des classes qui peuvent être ré-utilisés tout au long de mes projets.
Par exemple, supposons que j'ai un "Carnet d'Adresses". J'aimerais utiliser mon carnet d'adresses pour sélectionner envoyer un e-mail, ou peut-être qui s'ajoute à une demande de réunion.
Je développerai ce point de vue contrôleur de sorte qu'il peut être utilisé à la fois l'e-mail de contrôleur, et les réunions de contrôleur, avec une sorte de mécanisme de rappel à l'appelant de connaître l'utilisateur soit terminé de sélectionner quelqu'un à partir du carnet d'adresses, ou qu'ils ont annulé.
Il semble qu'il y a fondamentalement quatre (raisonnable) des approches on peut prendre dans ce scénario;
Créer un "AddressBookDelegate" protocole et d'un délégué de la propriété sur la AddressBookController. Ensuite, utilisez les messages définis dans le protocole pour communiquer le résultat (similaire à UIActionSheetDelegate).
Créer un "informelle" "AddressBookDelegate" protocole et d'un délégué de la propriété sur la AddressBookController, mais le type du délégué de la propriété sera "id", et de vérifier au moment de l'exécution avec "respondsToSelector:" pour voir si le délégué met en œuvre les méthodes que nous avons besoin (on dirait que la plupart de la cadre des trucs a commencé de cette façon).
Passer le AddressBookController un id qui représente un délégué, ainsi que de deux Corps qui préciser les méthodes à appeler lorsque l'utilisateur sélectionne un utilisateur ou annule la demande. L'avantage que je vois avec ce qui est; supposons que l'un contrôleur prend en charge à la FOIS de l'envoi de courriels ET l'organisation de rencontres (je sais que dans cet exemple, cela semble être une mauvaise conception... mais on peut imaginer une plus générique de la situation lorsque cela semble tout à fait raisonnable pour une classe utilitaire) - Dans ce cas, vous pourriez passer le AddressBookController différents SELs selon que vous êtes en train d'ajouter des utilisateurs à un courriel, ou ajouter des utilisateurs à une rencontre... une énorme amélioration par rapport à un iVar pour indiquer que le contrôleur "de l'état".
Passer le AddressBookController deux blocs, l'un à exécuter lorsque l'utilisateur sélectionne quelqu'un à partir du carnet d'adresses, et une autre si l'utilisateur annule la demande.
Les blocs ont été extrêmement utile pour moi, et de manière beaucoup plus élégante, je suis la recherche de moi-même presque confondus sur quand ne PAS les utiliser.
J'espère que des membres plus expérimentés de l'StackOverflow de la communauté que je peux les aider avec leurs réflexions sur ce thème.