Quelle est la différence entre les protocoles formels et informels dans Objective-C?
Protocoles formels et informels
Il existe deux variétés de protocoles, formels et informels:
Un protocole informel est une catégorie sur NSObject, ce qui oblige implicitement presque tous les objets à adopter le protocole. (Une catégorie est une fonctionnalité de langage qui vous permet d'ajouter des méthodes à une classe sans la sous-classer.) L'implémentation des méthodes dans un protocole informel est facultative. Avant d'appeler une méthode, l'objet appelant vérifie si l'objet cible l'implémente. Jusqu'à l'introduction de méthodes de protocole facultatives dans Objective-C 2.0, les protocoles informels étaient essentiels à la manière dont les classes Foundation et AppKit implémentaient la délégation.
Un protocole formel déclare une liste de méthodes que les classes clientes sont censées implémenter. Les protocoles formels ont leur propre syntaxe de déclaration, d'adoption et de vérification de type. Vous pouvez désigner des méthodes dont l'implémentation est requise ou facultative avec les mots clés @required et @optional. Les sous-classes héritent de protocoles formels adoptés par leurs ancêtres. Un protocole formel peut également adopter d'autres protocoles.
Les protocoles formels sont une extension du langage Objective-C.
Protocole informel: Category
(les implémentations sont facultatives)
Protocole formel: Extension
(Les implémentations sont facultatives et obligatoires)
Le langage Objective-C fournit un moyen de déclarer officiellement une liste de méthodes (y compris les propriétés déclarées) en tant que protocole. Les protocoles formels sont pris en charge par la langue et le système d'exécution. Par exemple, le compilateur peut rechercher des types basés sur des protocoles et les objets peuvent introspecter au moment de l'exécution pour signaler s'ils sont ou non conformes à un protocole.