Comment obtenir le nom ou la signature de la méthode actuelle dans un NSSsortingng?

Exemple: J’ai une méthode -myFooBarMethod:withFoo:bar:moreFoo: et à l’intérieur de l’implémentation de cette méthode, je veux dynamicment en obtenir le nom, comme @"-myFooBarMethod:withFoo:bar:moreFoo: dans un NSSsortingng. -typage de la signature de la méthode.

Je pense que cela doit faire quelque chose avec les sélecteurs. Comment puis-je obtenir le nom de la méthode actuelle (celle qui exécute le code) en tant que NSSsortingng?

Chaque appel de méthode passe également deux arguments cachés: un id nommé self et un SEL nommé _cmd . Vous pouvez utiliser NSSsortingngFromSelector pour convertir le sélecteur de méthode en un NSSsortingng:

 NSSsortingngFromSelector(_cmd); 

Utilisez __func__ . Ceci est une chaîne C, donc pour un NSSsortingng, utilisez [NSSsortingng ssortingngWithUTF8Ssortingng:__func__] .

Cela a deux avantages par rapport à _cmd :

  1. Il fonctionne dans les fonctions C et C ++ ainsi que dans les méthodes Objective-C. (En fait, __func__ doit exister par C99.)
  2. Dans les méthodes Objective-C, il inclut le type de méthode (méthode de classe vs méthode d’instance), ainsi que le nom de la classe et le sélecteur. Par exemple, "-[MyView drawRect:]" .

Comme exemple de ce genre de chose est utile: Ceci est un modèle pour les messages NSLog que j’utilise:

 NSLog(@"%@ %@: %@", NSSsortingngFromClass([self class]), NSSsortingngFromSelector(_cmd), @"A Message"); 

Cela vide la classe et la méthode sur la console lors de la connexion.

Selon la réponse de Martin, vous pouvez également lire les informations sur Objective C 2.0 Runtime .

Jouer dans les sortingpes comme cela a tendance à conduire à un code difficile à gérer, cependant.