2009-06-05 3 views

Répondre

3

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.

-1

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.

3

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

19

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).

+0

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

0

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é.

0

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.

Questions connexes