Как я осматриваю Класс в Objective C?

Обновление я согласовал код, чтобы устранить дублирование переопределенных методов и отследить инициатора свойства или метода путем реализации предложения 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)

6
задан 9 revs, 3 users 100% 27 January 2018 в 16:00
поделиться

1 ответ

Похоже, вам нужен NSMutableDictionary, привязанный к именам селекторов. Добавьте каждое имя селектора в словарь в качестве ключа с именем класса в качестве значения. Вы можете выполнить поиск в словаре перед добавлением селектора, чтобы устранить дубликаты.

1
ответ дан 17 December 2019 в 18:16
поделиться