2009-09-03 6 views
6

Donc j'essaie de me concentrer sur les interfaces Objctive-C, les délégués et les protocoles. Donc j'ai une question:Objective C interfaces, délégués, et protocoles

Un délégué doit-il être dans un fichier séparé ou peut-il être des méthodes définies dans votre classe?

Un protocole est-il similaire à une interface java? C'est ainsi que je le comprends au moment où il vous oblige à implémenter des méthodes si vous utilisez ce protocole.

Je suis toujours confus au sujet des interfaces. Je suis à peu près sûr qu'ils n'ont aucune ressemblance avec ce qu'est une interface en Java. Peut-être que c'est juste une déclaration de variables qui seront implémentées dans la classe.

Répondre

13
  • Le point d'un délégué doit être averti lorsqu'un autre objet fait quelque chose. Par exemple, un de vos objets veut savoir qu'une fenêtre est fermée, donc vous l'enregistrez en tant que délégué de la fenêtre et implémentez la méthode windowWillClose:. Il sera appelé par NSWindow de manière appropriée. Ainsi, les méthodes déléguées sont généralement définies dans une autre classe. Jusqu'à un certain point, il vous permet d'étendre la fonctionnalité d'une classe sans la sous-classer.

  • (Edit:. voir la réponse de Daniel sur les protocoles)

  • Le @interface est la déclaration de classe, où les variables et les méthodes sont énumérées. Il est situé dans le .h, que vous importez si vous avez besoin d'utiliser la classe. Le code pour les méthodes se trouve dans le @implementation dans le fichier .m. En Java, c'est différent, le fichier .java sert les deux objectifs.

22

Un protocole délégué doit être défini en tant que tel

@protocol 
//methods 
@end 

il peut être mis dans une catégorie .h, il vous suffit de i importer t chaque fois que vous allez utiliser.

Un protocole n'est pas comme une interface java, un protocole est un adaptateur qui permet à deux classes de fonctionner ensemble. Fondamentalement, il dit, si vous voulez que la classe A vous envoie des messages sur son état et ses actions, ce sont les méthodes qu'il appellera sur son délégué que vous devrez implémenter. Ce n'est pas comme une interface car une interface dit si vous voulez sous-classer cette classe, vous devez implémenter ces méthodes, le protocole dit si vous voulez interagir avec cette classe, vous devez implémenter ces méthodes, donc c'est quelque peu différent.

+0

+ 1 excellente description de la différence entre les interfaces et les protocoles. –

+0

+1 pour une si bonne explication. – Iducool

+0

Quand vous dites que ce n'est pas comme une interface, vous voulez dire que ce n'est pas comme une interface Objective-C. Mais si je ne me trompe pas, les protocoles Objective-C sont similaires aux interfaces * Java *. –

2

Je suggère de vérifier:

The Objective-C 2.0 Programming Language

Il devrait avoir la réponse à la plupart de vos questions au sujet des protocoles et des interfaces.

Protocols

Interfaces

En ce qui concerne les délégués, ils peuvent être un nouvel objet ou l'objet dans lequel vous créez la chose ayant besoin d'un délégué. Les fichiers n'ont vraiment rien à voir avec ça.