Sauf s'il me manque quelque chose, il semble arbitraire dans quel fichier .h j'ai mis la définition du protocole. Je me demande même s'il pourrait être dans son propre fichier .h ... (en Java, c'est dans son propre fichier)Protocole objectif-c défini dans son propre fichier .h?
Répondre
Je pense que tant qu'il est défini quelque part et inclus dans l'un des fichiers que vous êtes compilation, elle est définie. Il n'y a pas de conventions comme "ClassName.java" dans Objective-C comme il y en a en Java.
Ceci est très utile lorsque vous voulez faire des choses comme categories pour des choses comme des méthodes/propriétés privées.
En Objective-C est le même. Parce qu'un protocole est une liste de méthodes qui est partagée entre les classes. Le protocole est seulement la liste des méthodes sans implémentations correspondantes. Ils sont destinés à être mis en œuvre par quelqu'un d'autre.
Les protocoles sont généralement définis dans leur propre fichier .h (selon mon expérience). Mais ils peuvent être définis dans un fichier shared.h. Il serait difficile de permettre aux utilisateurs du protocole d'adopter le protocole dans un arrangement de fichiers partagés et, en outre, cela encombrerait votre API. La documentation et l'utilisation seraient probablement plus faciles si le protocole se trouve dans son propre fichier .h. De plus, l'utilisation de votre protocole pour des choses comme les implémentations polymorphes aurait moins de frais si vous aviez juste besoin d'inclure le fichier protocol .h au lieu d'un fichier .h ayant d'autres déclarations de classe. Je ne sais pas sur les coûts exacts/économies de cette idée, mais je l'ai lu ce qu'il y aurait (? Plus petit binaire)
Cordialement, Frank
Je pense que la mise en place du protocole dépend comment vous l'utilisez. La plupart du temps, un protocole est utilisé pour définir la fonctionnalité d'un délégué ou d'une source de données pour une autre classe. Si c'est le cas, je pense que vous pouvez mettre en toute sécurité la définition du protocole au sommet de l'autre classe - puisqu'ils sont destinés à être utilisés ensemble.
Si vous définissez un protocole à la place d'une classe de base partagée, vous devez probablement le placer dans un fichier distinct. Par exemple, j'ai plusieurs classes différentes qui implémentent le protocole "Operation". Certaines de mes autres fonctions s'attendent à recevoir un objet implémentant le protocole et ne se soucient pas trop des classes réelles. Dans ce cas, il est logique de placer la définition de protocole dans son propre fichier d'en-tête afin de pouvoir l'inclure elle-même.
Benny a raison, cependant - il sera techniquement défini, peu importe où vous le mettez (tant qu'il est inclus quelque part avant son utilisation).
C'est vraiment une question de style dans Objective-C. Je suppose que la manière vraiment "correcte" est de créer un fichier .h séparé pour le protocole, et si je faisais un protocole qui n'appartenait à rien d'autre (comme NSCoding par exemple) c'est exactement ce que je ferais. D'autre part, la plupart du temps quand je crée un protocole (ou un protocole informel, en utilisant une catégorie sur NSObject) il est lié à une autre classe, comme le protocole informel de source de données de NSTableView. Dans ces situations, je viens de mettre la déclaration dans le fichier d'en-tête de cette classe pour des raisons de simplicité.
Voir aussi Communicating with Objects d'Apple, qui traite des délégués, des protocoles et des sélecteurs. Bien qu'il soit répertorié sous Mac OS X, la plupart (sinon la totalité) semble s'appliquer également à iOS.
- 1. Intégrer l'image dans son propre fichier
- 2. Fichier PHP imprimer son propre contenu
- 3. Créer son propre codage
- 4. Exécuter l'application dans son propre répertoire
- 5. Eclipse peut extraire une seconde classe dans le fichier de classe dans son propre fichier
- 6. Plugin pour utiliser son propre app.config
- 7. Comment tuer son propre service Windows
- 8. Ajouter son propre javascript à la validation
- 9. Ajouter son propre filigrane au graphique flexible
- 10. Copier les articles choisis de Wikipédia dans son propre wiki?
- 11. Struct avec un pointeur vers son propre type dans ctypes
- 12. Définition de chaque cellule dans son propre groupe
- 13. Remplacer la correspondance actuelle par son propre texte dans jQuery
- 14. Comment créer son propre fichier header.jsp dans JBoss Portal avec prise en charge de la langue?
- 15. Création de son propre pointeur FILE * en C?
- 16. Quelle est la signification de "h" dans "<% = h [...]%>"?
- 17. Vérification d'un fichier mal défini
- 18. Problème de méthode défini dans le fichier d'en-tête VC++
- 19. Une DLL Windows peut-elle récupérer son propre nom de fichier?
- 20. Une méthode cfc ColdFusion peut-elle déterminer son propre nom?
- 21. Asp.net mvc grille avec chaque cellule ayant son propre enregistrement
- 22. est MKMapView allouer son propre gestionnaire de localisation?
- 23. L'application TFS doit-elle vivre sur son propre serveur dédié?
- 24. créer son propre plugin pour Thunderbird ou Zarafa?
- 25. MP4 H.264 dans Flash
- 26. Jetée embarquée recherchant des fichiers dans son fichier Jar
- 27. Une liste de propriétés doit-elle être gérée par son propre objet de modèle?
- 28. est-il un moyen propre de jouer un son mp3 dans le cadre compact 3.5
- 29. Comment l'attribut de protocole est-il défini pour les fragments IP?
- 30. problème avec JSF h: commandButton
Je travaillais sur la révision de code où j'ai trouvé un protocole réécrit en nombre de classes, je crée un fichier séparé pour définir le protocole.mais j'ai manqué d'importer ce fichier. votre réponse "(tant qu'elle est incluse quelque part avant son utilisation)." merci + – Alok