Quelle est la différence entre a protocol
et a delegate
?
et,
Comment pouvons-nous déclarer variables
dans un protocol class
?
Quelle est la différence entre a protocol
et a delegate
?
et,
Comment pouvons-nous déclarer variables
dans un protocol class
?
Un protocole, a déclaré à l' (@protocol
de la syntaxe en Objective-C) est utilisé pour déclarer un ensemble de méthodes qu'une classe "adopte" (déclare qu'il va utiliser ce protocole) mettre en œuvre. Cela signifie que vous pouvez spécifier dans votre code, "vous n'avez pas de soins de la classe est utilisée tant qu'elle met en œuvre un protocole particulier". Cela peut être fait en Objective-C comme suit:
id<MyProtocol> instanceOfClassThatImplementsMyProtocol;
Si vous l'indiquer dans votre code, puis toute la classe qui "conforme" pour le protocole MyProtocol peut être utilisé dans la variable instanceOfClassThatImplementsMyProtocol. Cela signifie que le code qui utilise cette variable sait qu'il peut utiliser selon les méthodes sont définies dans MyProtocol avec cette variable, peu importe de quelle classe il est. C'est un excellent moyen d'éviter l'héritage de modèle de conception, et évite de couplage.
Les délégués sont d'une utilisation de la langue en fonction des protocoles. La délégation modèle de conception est une manière de la conception de votre code pour utiliser les protocoles nécessaires. Dans le Cacao cadres, le délégué modèle de conception est utilisé pour spécifier une instance d'une classe qui est conforme à un protocole particulier. Ce protocole spécifie les méthodes que le délégué de la classe à mettre en œuvre pour effectuer des actions spécifiques à des événements. La classe qui l'utilise le délégué sait que son délégué coforms au protocole, de sorte qu'il sait qu'il peut appeler la mise en œuvre des méthodes à des moments donnés. Ce modèle de conception est un excellent moyen de découplage les classes, parce que c'est vraiment facile d'échanger une instance de délégué pour un autre, le programmeur a à faire est de s'assurer que le remplacement d'instance ou de classe est conforme au protocole nécessaire (c'est à dire qu'il met en œuvre les méthodes spécifiées dans le protocole)!
Les protocoles et les délégués ne sont pas limités seulement à Objective-C et Mac/le développement d'iOS, mais l'Objectif-C de la langue et de la Pomme de cadres font un usage intensif de ce génial pour le langage et le modèle de conception.
Edit:
Voici un exemple. Dans le UIKit cadre de Cocoa Touch, il y a un UITextFieldDelegate protocole. Ce protocole définit une série de méthodes de classes qui sont les délégués d'un UITextField instance doit mettre en œuvre. En d'autres termes, si vous souhaitez affecter un délégué à un UITextField (à l'aide de l' delegate
de la propriété), vous feriez mieux de faire en sorte que cette classe est conforme à UITextFieldDelegate. En fait, parce que le délégué de la propriété de l' objet UITextField est défini comme:
@property(nonatomic, assign) id<UITextFieldDelegate> delegate
Ensuite, le compilateur va donner des avertissements si vous affectez une classe qui n'est pas de mettre en œuvre le protocole. C'est vraiment utile. Vous devez déclarer qu'une classe implémente un protocole, et en disant que c'est le cas, vous êtes de laisser les autres classes, à savoir qu'ils peuvent interagir d'une manière particulière avec votre classe. Donc, si vous affectez une instance de MyTextFieldDelegateClass à l' delegate
de la propriété de l' objet UITextField, l' objet UITextField sait qu'il peut appeler certaines méthodes particulières (liées à la saisie de texte, sélection, etc.) de votre MyTextFieldDelegateClass. Il le sait parce que MyTextFieldDelegateClass a dit qu'il mettra en œuvre la UITextFieldDelegate protocole.
En fin de compte, tout cela conduit à beaucoup plus de flexibilité et d'adaptabilité dans votre projet de code, je suis sûr que vous vous rendrez compte très vite après l'utilisation de cette technologie! :)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.