2009-09-22 8 views
17

J'aimerais pouvoir mettre des messages de trace du nom de la classe et du nom de la méthode pour toutes les classes de mon projet.Récupérer dynamiquement le nom de la méthode actuelle

Y at-il un moyen d'obtenir le nom de la méthode actuelle au moment de l'exécution, semblable à:

NSLog(@"classname: %@", [self className]); 

où l'auto est une classe dérivée de NSObject?

Répondre

35
NSLog(@"method name: %@", NSStringFromSelector(_cmd)); 

_cmd est un argument caché (comme self) que toutes les méthodes Objective-C reçoivent. Sa valeur est le sélecteur utilisé pour appeler la méthode.

+0

i SEL myRunTimeSelector = utilisent _cmd. Merci – Alok

+0

Solution appropriée, y compris les explications. Merci. –

18

ÉDITÉ: Je pense que cette méthode est plus générique ... check it out ..

NSLog(@"%s", __PRETTY_FUNCTION__); 
+0

mes excuses si je sors comme condescendant, ne voulait pas dire ... J'ai trouvé cette solution pour être plus générique ... – Nishant

+2

bonne réponse. Je l'ai mis dans une macro, comme ceci: #define LOGME NSLog (@ "% s", \ _ \ _ PRETTY_FUNCTION \ _ \ _); –

+0

Grande Réponse @Nishant .. Il donne à la fois le nom de la classe et le nom de la méthode pour un bon débogage ... –

1

Cela fonctionne aussi:

NSLog(@"%@", [NSString stringWithUTF8String:__func__]) 
Questions connexes