Pour Objective-C méthodes, la pratique générale est de mettre les méthodes que vous souhaitez exposer dans l' @interface
de la section de l'en-tête de fichier de sorte que les autres code peut contenir seulement le .h et de savoir comment interagir avec votre code. Basés sur la commande "paresseux déclaration" fonctionne exactement comme les fonctions en C - vous ne pas avoir à déclarer un prototype de méthode, sauf si vous avez une dépendance qui ne peut pas être réglé par la commande, mais vous pouvez ajouter des prototypes de méthode à l'intérieur de l' @implementation
si nécessaire.
Donc, oui, vous êtes sur la bonne voie. Ne pas répéter la méthode de prototype pour les méthodes héritées - le compilateur trouve dans le parent du fichier d'en-tête. Délégué méthodes peuvent être définies comme des prototypes dans une catégorie (cloué sur une classe) et mis en place comme vous le souhaitez, mais le délégué n'a pas besoin de fournir un prototype de méthode, puisqu'il est déjà défini. (Il peut encore s'il veut, pour plus de clarté, etc.)
Puisque vous êtes seulement à apprendre Objective-C, le reste de cette réponse est beaucoup plus de détails que vous avez demandé. Vous avez été averti. ;-)
Lorsque vous de manière statique type d'une variable (par exemple, MyClass*
au lieu de id
), le compilateur vous avertir lorsque vous essayez d'appeler une méthode d'une classe ne fait pas de publicité qu'elle met en œuvre, si elle fait ou non. Si vous dynamiquement le type de la variable, le compilateur ne pas vous arrêter d'appeler ce que vous voulez, et vous n'obtiendrez que des erreurs d'exécution, si vous appelez quelque chose qui n'existe pas. Aussi loin que la langue est concerné, vous pouvez appeler la méthode qu'une classe implémente sans erreurs à l'exécution, il n'existe aucun moyen permettant de limiter l'appel d'une méthode.
Personnellement, je pense que c'est effectivement une bonne chose. Nous obtenons donc utilisé pour l'encapsulation et la protection de notre code de code que nous avons parfois traiter l'appelant comme un sournois coupable plutôt que de la confiance d'un collègue ou d'un client. Je trouve que c'est assez agréable de code avec un état d'esprit de "vous faites votre travail et je fais le mien" où tout le monde respecte les limites et prend en charge leur propre chose. Vous pourriez dire que "l'attitude" de l'Objective-C est un de la confiance de la communauté, plutôt que de la stricte application de la loi. Par exemple, je suis heureux d'aider toute personne qui vient à mon bureau, mais il serait vraiment ennuyé si quelqu'un raté avec mon stuff ou déplacé les choses autour de vous sans vous le demander. Bien conçu, le code ne doit pas être paranoïaque ou sociopathe, il n'a qu'à bien travailler ensemble. :-)
Cela dit, il existe de nombreuses approches pour la structuration de vos interfaces, selon le niveau de granularité que vous voulez/besoin d'en exposer les interfaces pour les utilisateurs. Toutes les méthodes déclarées dans l'en-tête public sont essentiellement des règles du jeu équitables pour toute personne à utiliser. Cacher des déclarations de méthode est un peu comme le verrouillage de votre voiture ou de la maison - il ne sera probablement pas garder tout le monde, mais (1) il conserve les honnêtes gens honnêtes" de ne pas les tenter avec quelque chose qu'ils ne devraient pas être de jouer avec, et (2) toute personne qui fait entrer le sais certainement qu'ils n'étaient pas censés le faire, et ne peut pas vraiment se plaindre des conséquences négatives.
Ci-dessous sont quelques-uns des conventions-je utiliser pour les noms de fichier, et ce qui se passe dans chaque fichier à partir d'un .m fichier en bas, chaque fichier comprend l'un au-dessus d'elle. (À l'aide d'un strict de la chaîne de comprend permettra d'éviter des choses comme le double symbole d'avertissement.) Certains de ces niveaux s'appliquent uniquement aux plus grands composants réutilisables, tels que le Cacao cadres. De les adapter en fonction de vos besoins, et utilisez tous les noms qui vous convient.
-
MyClass.h
- Public de l'API (Interface de Programmation d'Application)
-
MyClass_Private.h
- L'intérieur de l'entreprise SPI (Système Interface de Programmation)
-
MyClass_Internal.h
- Projet interne de l'IPI (Interne Interface de Programmation)
-
MyClass.m
- Mise en œuvre, généralement de toutes les API/SPI/IPI déclarations
-
MyClass_Foo.m
- Mise en œuvre complémentaire, comme pour les catégories
L'API est pour tout le monde, et est soutenu publiquement (généralement en Foo.framework/Headers
). SPI expose des fonctionnalités supplémentaires pour les clients internes de votre code, mais avec la compréhension que le soutien peut être limitée, et l'interface est sujet à changement (généralement en Foo.framework/PrivateHeaders
). L'IPI se compose de la mise en œuvre des détails spécifiques qui ne doivent jamais être utilisés à l'extérieur du projet lui-même, et ces en-têtes ne sont pas inclus dans le cadre du tout. Toute personne qui choisit d'utiliser le SPI et l'IIP appels, le fait à ses propres risques, et souvent à leur détriment, lorsque des modifications de leurs casser le code. :-)