Это - решение на основе времени выполнения C функции:
class_copyMethodList возвращает список методов класса, учитывая Объект класса, доступный от объекта.
#import <objc/runtime.h>
[..]
SomeClass * t = [[SomeClass alloc] init];
int i=0;
unsigned int mc = 0;
Method * mlist = class_copyMethodList(object_getClass(t), &mc);
NSLog(@"%d methods", mc);
for(i=0;i<mc;i++)
NSLog(@"Method no #%d: %s", i, sel_getName(method_getName(mlist[i])));
/* note mlist needs to be freed */
Что-то вроде этого должно работать (просто помещает его в объект, Вам любопытно на предмет). Например, если у Вас есть объект, это - делегат, и хотят знать, какие 'рычаги' доступны, это распечатает сообщения, чтобы дать Вам что ключ к разгадке:
-(BOOL) respondsToSelector:(SEL)aSelector {
printf("Selector: %s\n", [NSStringFromSelector(aSelector) UTF8String]);
return [super respondsToSelector:aSelector];
}
Примечание, что я обнаружил это в iPhone Developer's Cookbook , таким образом, я не могу взять кредит! Например, вывод, который я получаю от UIViewController
, который реализует протоколы <UITableViewDelegate, UITableViewDataSource>
:
Selector: tableView:numberOfRowsInSection:
Selector: tableView:cellForRowAtIndexPath:
Selector: numberOfSectionsInTableView:
Selector: tableView:titleForHeaderInSection:
Selector: tableView:titleForFooterInSection:
Selector: tableView:commitEditingStyle:forRowAtIndexPath:
Selector: sectionIndexTitlesForTableView:
Selector: tableView:sectionForSectionIndexTitle:atIndex:
...
...
etc.,etc.