Table des matières:
- Comment obtenir la classe d'un objet
- Comment appeler dynamiquement les méthodes
- Comment vérifier la spécification d'un objet
Vidéo: Thrive : l'application pour réduire l'addiction aux autres applications 2025
L'introspection fait référence aux fonctionnalités d'une application iOS langage de programmation pour examiner la structure et d'autres détails d'un objet et de sa classe au moment de l'exécution. Ces détails peuvent inclure:
-
Arbre d'héritage d'un objet
-
S'il est conforme à un protocole spécifique
-
S'il répond à un certain message
Lorsque vous savez de quoi un objet est fait, vous pouvez construire des messages par programme à envoyer, ce qui rend votre programme beaucoup plus dynamique.
Comment obtenir la classe d'un objet
Vous pouvez obtenir la classe d'un objet lors de l'exécution. En fait, Objective-C traite les classes comme des objets de première classe. Chaque objet de classe pointe vers une structure de données en mémoire, possède une superclasse (connue sous le nom de métaclasse) et peut répondre à des messages qui invoquent des méthodes.
Lorsque vous appelez une méthode de classe, vous envoyez réellement un message à l'objet de la classe.
Vous pouvez obtenir une référence à l'objet de classe pour la classe en envoyant à la classe un message de classe (Garçon, était-ce déroutant d'écrire?), Et vous obtenez la superclasse d'une classe en envoyant le objecter un message de superclasse. Par exemple, vous pouvez imprimer la classe et la superclasse d'un objet, tel qu'un objet StackOfInteger, comme suit:
StackOfInteger * aStack = [[StackOfInteger alloc] init]; NSLog (@ "La classe est% @, et super est% @.", [AStack class], [aStack superclass]);
Comment appeler dynamiquement les méthodes
Vous pouvez ensuite appeler une méthode sur un objet de classe comme ceci:
Classe postfixCalculatorClass = [someObject class]; [postfixCalculatorClass performSelector: @selector (printClassDescription)];
Deux éléments doivent être expliqués ici. Tout d'abord, le @selector est une directive de compilation -time et renvoie un pointeur vers la méthode printClass. Ensuite, vous pouvez utiliser performSelector pour appeler cette méthode.
Dans l'exemple précédent, le nom de la méthode a été traduit en un pointeur vers la méthode au moment de la compilation. Vous pouvez également appeler une méthode d'instance sur un objet en utilisant le nom de chaîne d'une méthode, lors de l'exécution, comme suit:
SEL printClassDescriptionSEL = NSSelectorFromString (@ "printClassDescription"); [postfixCalculatorClass performSelector: printClassDescriptionSEL];
Dans cet exemple, vous pouvez utiliser le type SEL (également appelé sélecteur dans le langage Objective-C, et donc le SEL) pour contenir la représentation interne d'une méthode.
Comment vérifier la spécification d'un objet
Une fois que vous avez un handle pour un objet de classe, vous pouvez l'examiner à l'exécution en utilisant les fonctions d'introspection fournies dans Objective-C.Par exemple, vous pouvez tester cet objet pour voir de quel type il s'agit. Vous pouvez l'inspecter pour voir s'il a une certaine méthode ou un certain attribut, et ainsi de suite.
Le tableau ci-dessous montre toutes les méthodes pour tester la structure et les capacités d'un objet de classe et pour effectuer des actions sur celui-ci.
Méthode | Question ou Action |
---|---|
- (BOOL) isKindOf: class-object | L'objet est-il un membre ou un descendant d'une classe? |
- (BOOL) isMemberOf: class-object | L'objet est-il membre d'une classe? |
- (BOOL) répond à: sélecteur | L'objet peut-il répondre à une méthode? |
+ (BOOL) instancesRespondTo: selector | Les instances de la classe peuvent-elles répondre à un message? |
- (id) exécute: sélecteur | Applique la méthode spécifiée par le sélecteur. |
+ (BOOL) conformsToProtocol: (Protocole *) aProtocol | OUI si le destinataire est conforme au protocole aProtocol; sinon, NON. |
Pour plus de détails sur l'introspection et son utilisation, consultez le document Apple iOS Runtime Reference et le Guide de programmation d'Apple Developer Objective-C.
