Обновление я согласовал код, чтобы устранить дублирование переопределенных методов и отследить инициатора свойства или метода путем реализации предложения Mark's. Еще не занялись типами свойства (вероятно, запустится с property_getAttributes()
когда я делаю). Также разделенный остаточные символы нижнего подчеркивания.
В основном мне нужен способ напомнить мне, какие методы и свойства доступны на данном объекте, не скачкообразно перемещая полностью вниз дерево наследования.
Я приготовил следующую функцию, но она уезжает немного для желания:
#import
NSInteger inspectClass_alphabeticSort(id string1, id string2, void *reverse)
{
if ((NSInteger *)reverse == NO)
{
return [string2 localizedCaseInsensitiveCompare:string1];
}
return [string1 localizedCaseInsensitiveCompare:string2];
}
void inspectClassStopAt(Class inspectedClass, Class stopClass)
{
Class originalClass = inspectedClass;
NSString *originalClassString = [NSString stringWithFormat:@"%@", originalClass];
NSString *inheritancePath = [NSString stringWithFormat:@"%@", originalClass];
Method *methods;
objc_property_t *properties;
unsigned int i;
unsigned int methodCount;
unsigned int propertyCount;
int reverseSort = NO;
NSArray *sorted;
NSArray *methodsAndPropertiesKeys;
NSMutableDictionary * methodsAndProperties = [NSMutableDictionary dictionaryWithCapacity:10];
NSString *inspectedClassString;
NSString *methodOrPropertyName;
while (inspectedClass != stopClass)
{
inspectedClassString = [NSString stringWithFormat:@"%@", inspectedClass];
if (inspectedClass != originalClass)
{
inheritancePath = [inheritancePath stringByAppendingFormat:@" : %@", inspectedClass];
}
methods = class_copyMethodList(inspectedClass, &methodCount);
properties = class_copyPropertyList(inspectedClass, &propertyCount);
for (i=0; i
И некоторый демонстрационный вывод от inspectClass([TextMap class]);
:
TextMap : Surface
position (Surface)
size (Surface)
-addChild: (Surface)
-dealloc
-init (Surface)
-initWithFile:
-position (Surface)
-render
-setPosition: (Surface)
-setSize: (Surface)
-setText:
-size (Surface)
-update (Surface)
Похоже, вам нужен NSMutableDictionary, привязанный к именам селекторов. Добавьте каждое имя селектора в словарь в качестве ключа с именем класса в качестве значения. Вы можете выполнить поиск в словаре перед добавлением селектора, чтобы устранить дубликаты.