2009-08-15 4 views
10

Jak uzyskać listę klas dla klasy klasy? Próbowałem już używać funkcji class_copyMethodList zadeklarowanej w <objc/runtime.h>, ale to tylko daje mi metody instancji. Znalazłem także funkcję, która daje mi metodę dla metody klasy, ale tylko wtedy, gdy najpierw wybieram metodę (class_getClassMethod).Uzyskaj listę metod klas dla dowolnej klasy

Wszelkie pomysły?

Dzięki,

Dave

Odpowiedz

11

class_copyMethodList zwraca metody instancji przeszedł klasie. Metody klasy są w rzeczywistości metodami instancji klasy metaclass.

Rozwiązanie problemu znajduje się bezpośrednio pod numerem API Documentation dla .

+0

Doskonale, dzięki! Nie mogę uwierzyć, że to przegapiłem. = P –

19

Użyj metaclass.

#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

Ponieważ jest to metoda 'copy', nie zapomnij o' free (metodach) 'gdy skończysz. Bez względu na to, czy używasz ARC-C, alokacje nie są liczone, więc automatyczne liczenie odwołań nie pomoże ci w tym. – Tommy

+1

Dokumentacja wydaje się nieco rozmyta na ścieżce importu, użyłem: #import prewett