Exemple: J'ai une méthode -myFooBarMethod:withFoo:bar:moreFoo:
et à l'intérieur de l'implémentation de cette méthode je veux obtenir dynamiquement le nom de celui-ci, comme @"-myFooBarMethod:withFoo:bar:moreFoo:
dans un NSString. Pas de typage dur de la signature de la méthode. Je pense que cela doit faire quelque chose avec des sélecteurs. Comment puis-je obtenir le nom de la méthode actuelle (celle qui exécute le code) en tant que NSString?Comment obtenir le nom ou la signature de la méthode actuelle dans un NSString?
Répondre
Chaque appel de méthode passe également deux arguments cachés: un id
nommé self
et un SEL
nommé _cmd
. Vous pouvez utiliser NSStringFromSelector
pour convertir le sélecteur de méthode pour un NSString:
NSStringFromSelector(_cmd);
Selon la réponse de Martin, mais vous pouvez également lire les informations Objective C 2.0 Runtime. Jouer dans les tripes comme ça a tendance à conduire à un code difficile à gérer, par contre.
Il y a des fois c'est valide, cependant. – Abizern
Les exemples de développeur d'Apple l'utilisent pour la journalisation comme suit: 'NSLog (@"% @ received% @ ", self, NSStringFromSelector (_cmd));' –
À titre d'exemple, où ce genre de chose est utile: Ceci est un modèle pour les messages NSLog que j'utilise:
NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");
Cette dumps la classe et la méthode de la console lors de la connexion.
Utilisez __func__
. C'est une chaîne C, donc pour un NSString, utilisez [NSString stringWithUTF8String:__func__]
.
Cela a deux avantages par rapport _cmd
:
- Il travaille dans les fonctions C et méthodes C++ ainsi que les méthodes Objective-C. (En fait,
__func__
doit exister en C99.) - Dans les méthodes Objective-C, elle inclut le type de méthode (méthode de classe par rapport à la méthode d'instance) et le nom de classe ainsi que le sélecteur. Par exemple,
"-[MyView drawRect:]"
.
- 1. Comment obtenir le nom de la cible actuelle dans MSBuild?
- 2. Comment obtenir le nom de la méthode actuelle dans Delphi 7?
- 3. obtenir le nom de la méthode d'appel
- 4. Comment obtenir la date actuelle dans Cocoa
- 5. Récupérer dynamiquement le nom de la méthode actuelle
- 6. Obtention du nom de la méthode actuelle en C++
- 7. Comment obtenir le fichier en cours, la classe en cours et la méthode actuelle avec Python?
- 8. Comment obtenir le nom de la classe
- 9. Comment obtenir le domaine de la demande actuelle?
- 10. fonction pour obtenir le nom de n'importe quelle méthode?
- 11. Meilleure méthode pour obtenir la configuration de la mémoire actuelle dans VBA
- 12. Utilisation de la classe actuelle dans la déclaration de méthode statique Java
- 13. Obtenir le nom de la variable Get
- 14. Cocoa: Obtenir la position actuelle de la souris sur l'écran
- 15. Puis-je trouver le nom de la méthode que j'utilise?
- 16. Comment déterminer un Dynamiquement Nom de la méthode en Ruby
- 17. Obtenir le nom de la clé primaire de la table
- 18. WCF: comment obtenir l'adresse IP ou le nom du serveur
- 19. Obtenir le nom de l'ordinateur dans un service Windows?
- 20. Obtenir le nom de la page principale dans asp.net MVC
- 21. Nombre de caractères dans NSString ou NSMutableString?
- 22. Comment puis-je obtenir un argument de nom non nul avec la méthode org.xml.sax.ext.EntityResolver2 resolveEntity?
- 23. Invoquer une méthode Objective-C par nom
- 24. Comment obtenir l'URL de la page actuelle en PHP
- 25. Récupérer le nom de la méthode invoquée exécutée dans un Func
- 26. Comment obtenir l'adresse IP ou le nom d'hôte du navigateur?
- 27. Méthode Signature Problème
- 28. Comment puis-je obtenir le nom de la vue dans la page maître
- 29. Comment obtenir le nom/la description d'une exception?
- 30. Comment obtenir la valeur de la première colonne de la ligne actuelle de Winform DataGridView?
Vous pouvez également utiliser la macro ** '__PRETTY_FUNCTION__' **, que le préprocesseur remplace par une chaîne C (char *) du nom de la méthode. Cela fonctionne également pour les fonctions C. –
Je n'étais pas au courant qu'il y avait une macro appelée '__PRETTY_FUNCTION__'. J'aime ça. Maintenant, je dois juste trouver une raison de l'utiliser dans mon code quelque part ... – GeneralMike