N'Objective-C ont de réflexion?
Je suis en train de faire des recherches sur Objective-C, et j'aimerais savoir si il a le concept de la réflexion. Aucun des documents que j'ai trouvé à ce jour décrit la réflexion.
- Voir en.wikipedia.org/wiki/Objective-C
- Objective-C ont un beaucoup plus puissant réflexion capacité de Java ont. Vous pouvez en savoir plus à partir de Apple Objective-C Runtime Guide de Programmation.
- merci "ott" et "venj" .
- Vous obtiendrez une meilleure réponse si vous l'expliquer précisément ce que vous entendez par "réflexion". Comme beaucoup de langues, ObjC a certains aspects de la réflexion et pas d'autres.
- notez que vous pouvez accepter une réponse en cliquant sur le gros blanc coche apparaît à gauche de la réponse.
- ok merci 🙂
- OK . je veux de la recherche sur tous les concept de la Réflexion en Objective-C . D'ailleurs, je veux aussi de la recherche sur la Classe Abstraite en Obj-C . hik hik
Vous devez vous connecter pour publier un commentaire.
Il existe d'exécution des fonctions décrites dans le Référence D'Exécution qui permet non seulement d'interrogation pour les fonctionnalités d'une classe ou d'une instance, mais aussi l'ajout d'une méthode, ou même en créant une nouvelle classe à l'exécution. Je dis que c'est très dynamique, sorte de réflexion, qui n'est pas généralement disponible à C-en fonction des langues. Mike Ash wrappers est un Objectif-C wrapper autour de cela. Encore une fois, il peut même ajouter des méthodes! La classe de base de Cacao, de
NSObject
, fournissent également des wrappers pour beaucoup de l'exécution des fonctions, voirNSObject
protocole de référence. Par exemplefait ce que la méthode des noms de dire. Vous pouvez même ajouter une méthode à la volée. Par exemple,
Ce produit de la sortie
Ce qu'il fait est comme suit:
SEL
est la variable qui représente le message (ou un appel de méthode, dans la terminologie.)resolveInstanceMethod:
d'une classe, si un message envoyé à une instance n'est pas implémentée dans la classesayHi
à celle de la méthode de la mise en œuvre._cmd
pour voir ce qui a été le sélecteur utilisé dans l'appel de la méthode. Donc, même à partir d'un seulsayHi
mise en œuvre, nous pouvons obtenir de sortie différents.Certains de la norme de Cacao de mise en œuvre (Valeur-Clé de Codage, Clé-Valeur d'Observation et de Base de Données, en particulier) utilise le moteur d'exécution pour modifier dynamiquement la classe.
Oui, Objective-C a la réflexion (et les classes abstraites). Si cette réflexion s'adapte à vos besoins ou non est une autre question.
Réflexion Objective-C est étonnamment souple pour un C dérivé de la langue. Vous pouvez demander à une classe quelles sont les méthodes qu'il met en œuvre ou vous pouvez modifier et/ou ajouter des méthodes dans les classes existantes. Vous pouvez même créer de nouvelles classes à la volée ou de changer la classe d'une instance à tout moment.
Typique de l'Objective-C programme ne satisfait à aucune de ces choses (au moins pas directement) enregistrer occasionnellement appel
respondsToSelector:
ouconformsToProtocol:
. Tout en Objective-C, est entièrement dynamique, à la réflexion, langage orienté objet, cela ne signifie pas que ces modèles sont encouragés ou généralement utilisé.Vous pourriez trouver mes réponses à ces questions intéressantes:
En Objective-C, comment trouver le type de retour d'une méthode par réflexion?
N'Objective-C ont une Bibliothèque Standard?
Smalltalk fonctions d'exécution absent sur Objective-C?
Et, bien sûr, le moteur d'exécution est très bien documenté. Comme c'est la langue. Ou vous pourriez lire la source.
Je suppose que je ne sais pas quel est l'aspect de la réflexion que vous cherchez. Vous êtes à la recherche pour comment faire pour déterminer la classe d'une variable donnée est? Si si, check this out: Objective-C classe -> string comme: [NSArray className] -> @"NSArray"
Vous êtes à la recherche pour plus que juste cela?
Il y a un troupeau de méthodes qui peut accéder aux différentes propriétés d'une classe et, sans doute, "coup d'oeil" et "poke" à certains objets internes. Je n'ai jamais joué avec eux, et un peu de lecture que j'ai fait suggère qu'ils sont loin d'être parfaits, mais ils ne semblent offrir une certaine capacité de "réflexion", similaire à Java concept.