2009-08-15 7 views
10

Comment puis-je obtenir la liste des méthodes de classe pour une classe particulière? J'ai essayé d'utiliser la fonction class_copyMethodList déclarée dans <objc/runtime.h>, mais cela ne me donne que des méthodes d'instance. J'ai également trouvé une fonction qui me donne une Méthode pour une méthode de classe, mais seulement si j'ai d'abord le sélecteur à la méthode (class_getClassMethod).Obtenir la liste des méthodes de classe pour une classe arbitraire

Des idées?

Merci,

Dave

Répondre

11

class_copyMethodList retourne les méthodes d'instance de la classe passé. Les méthodes de classe sont en fait des méthodes d'instance de la métaclasse de la classe. La solution à votre problème est incluse dans le API Documentation pour class_copyMethodList.

+0

Parfait, merci! Je ne peux pas croire que j'ai raté ça. = P –

19

Utilisez la métaclasse.

#import <objc/runtime.h> 

int unsigned numMethods; 
Method *methods = class_copyMethodList(objc_getMetaClass("NSArray"), &numMethods); 
for (int i = 0; i < numMethods; i++) { 
    NSLog(@"%@", NSStringFromSelector(method_getName(methods[i]))); 
} 
free(methods); 
+3

Comme c'est une méthode 'copy', n'oubliez pas' free (methods) 'quand vous en avez fini. Que vous utilisiez des allocations ARC-C ou non, la comptabilisation automatique des références ne vous aidera pas. – Tommy

+1

La documentation semble un peu floue sur le chemin d'import, j'ai utilisé: #import prewett

Questions connexes