La différence entre le protocole et les délégués?
Quelle est la différence entre un protocol
et un delegate
?
et,
Comment pouvons-nous déclarer variables
dans un protocol class
?
Vous devez vous connecter pour publier un commentaire.
Quelle est la différence entre un protocol
et un delegate
?
et,
Comment pouvons-nous déclarer variables
dans un protocol class
?
Vous devez vous connecter pour publier un commentaire.
Un protocole, a déclaré à l' (
@protocol
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. Le 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)!
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 de UITextField instance doit mettre en œuvre. En d'autres termes, si vous souhaitez affecter un délégué à un UITextField (à l'aide de la
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 UITextField est défini comme:@property(nonatomic, weak) id<UITextFieldDelegate> delegate
Puis le compilateur donne 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 à la
delegate
propriété de UITextField, le 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! 🙂
assign
devrait êtreweak
sinon ça va crash une fois délégué est libéré et accessible dans l'avenir.Protocole est un ensemble de méthodes (soit obligatoire ou optionnel) ceux qui seraient mises en œuvre par la classe qui est conforme à ce protocole. Alors que, délégué est la référence à la classe qui est conforme à ce protocole et adhérer à mettre en œuvre des méthodes définies dans le protocole.
Ont un coup d'oeil à cette pour plus de détails.
Délégation: Agissant au Nom d'un Autre Objet(Design pattern dans oops)
C'est un modèle de conception dans lequel un objet appelé le délégué agissant en son nom, et à la demande des, un autre objet.À un certain moment dans l'exécution, il envoie un message à son délégué; le message indique le délégué que certains événement est sur le point d'arriver et vous demande une réponse.Le délégué implémente la méthode invoquée par le message et renvoie une valeur appropriée
Un exemple en est l'appdelegate objet d'actes au nom de appobject.
Protocole Permettant la Communication Entre les Objets ne sont Pas Liés par l'Héritage
Un protocole est une déclaration d'une interface de programmation dont les méthodes de la classe peut implémenter.Les protocoles sont objectif c fonctionnalité du langage.Il suffit de parler une liste des méthodes de la classe peut implémenter.Pour l'utiliser, vous devez confirmer au protocole.
exemple est UITableviewDatasource protocole,dont les méthodes cellforRowAtIndexPath est déclaré dans le protocole,mais nous mettons en œuvre pour la création de la tableview.
Reportez-vous https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/StreamlineYourAppswithDesignPatterns/StreamlineYourApps/StreamlineYourApps.html
Un jemportant prerequisite est de comprendre les protocoles fpremière puis délégués. Je vous recommande d'abord de voir cette court tutoriel, puis voir Qu'est ce qu'un Protocole?. En outre, vous DEVEZ connaître la différence entre la classe et le protocole de voir Objective-C: Classe versus Protocole et Quel est le point de Protocoles?.
protocol:
est SEULEMENT un modèle de fonctions à mettre en œuvre. Toute classe qui adopte ce plan devra mettre en œuvre ces fonctions. (Ne PAS confondre la mise en œuvre de une fonction avec appel une fonction)delegate:
1 est pour vous de ne ce qu'un delegat-ing classe est en train de faire sans héritage par exemplePar exemple vous avez un viewController et que vous souhaitez télécharger des images ou vous voulez obtenir à la clientèle à distance pour un magasin, de sorte qu'au lieu de le faire par vous-même, vous avez juste un moyen de l'objet qui le fait pour vous. Cet objet est connu comme le délégué de l'objet. Normalement vous devriez faire quelque chose en tant que telle:
très similaire à ce que vous faites pour se conformer à une tableViewDelegate
votre
self
pouvez également le faire dès maintenant tableView choses liées.delegate:
2Mais cet objet (le délégué) est une plaine de vanille objet (id ou pas du Tout). Elle est bête! Vous devez vous dire: "Hey pour vous de travailler à disposer de fonctionnalités spécifiques vous devez vous conformer au protocole que nous avons définies pour vous. (nous n'allons pas accorder Tout ou id car ce serait stupide, (au contraire) nous avons fait un très explicite clos protocole "
en Objective-C, il est un pur de vanille
id
, de sorte que vous nedans Swift* c'est un peu plus facile de le faire :
Protocole vient à la rescousse...le délégué met en œuvre (ne pas utiliser) la fonction de cependant il correspond aux besoins de votre déléguant classe.
*: En rapidement vous n'avez pas
id
encore, vous n'avez pas besoin de son équivalentAny
parce que dans Swift protocoles sont également une classe de première catégorie de citoyensLaisser voir la déclaration du délégué dans le programme
La delegatingObject conserve une référence à l'autre objet et au moment approprié envoie un message à un objet.
Un protocole est un ensemble de propriétés et de méthodes qui peuvent être mises en œuvre par n'importe quelle classe.
Il implique que n'importe quel objet (de type id) qui confirme myProtocol (groupe de propriétés et méthodes) peuvent travailler en tant que délégué ou vous pouvez dire à toute personne (id), qui a un degré requis (protocole) peut travailler en tant qu'Enseignant (Délégué).
Nous pouvons dire Protocole comme un ensemble de règles.
Les règles peuvent être facultatifs ou obligatoires comme nous avons de l'utiliser dans le protocole.
Délégués est un message de la technique de passage en objective-C et swift. Un objet a à prendre soin de ce message.
Ex: Un exemple simple que chaque développeur iOS utilisé pour est UITableview,
Lors de la création d'une table, vous devez mettre en Œuvre
cellForRowAtIndexPath()
etnumberOfRowsInSection()
dans votre contrôleur, que les règles(protocole) sont à définir en UItableview classe comme nécessaire, c'est une nécessite Protocole.Il y a d'autres protocole comme
heightForRowAtIndexPath()
qui est facultatif.En vient maintenant à Délégué dans UITableView il existe une méthode(message)
didSelectRowAtIndexPath()
qui vous envoie un message d'un événement.Si vous définissez le délégué de l'auto, cela signifie que votre contrôleur est prêt à prendre soin de cet événement.Ce terme semble être plus déroutant pour les développeurs, car nous sommes habituelle à utiliser ensemble(:
Profitez-en!!!!