Objective-C trouve les propriétés/variables membres/méthodes/protocoles d'une classe

Trouver tous les attributs de la classe actuelle (à l'exception des classes parentes)

- (NSArray *)findProperties:(Class)class
{
    
    
    unsigned int numProps;
    NSMutableArray *arr = [NSMutableArray array];
    objc_property_t *property = class_copyPropertyList(class, &numProps);
    for(int i = 0; i < numProps; i++) {
    
    
        objc_property_t prop = property[i];
        NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];
        [arr addObject:propName];
    }
    return [arr copy];
}

Trouver tous les attributs de la classe actuelle (y compris les classes parentes)

- (NSArray *)findAllProperties:(Class)class array:(NSMutableArray *)arr
{
    
    
    if (class == [NSObject class]) {
    
    
        [arr addObjectsFromArray:[self findProperties:[NSObject class]]];
        return arr;
    }
    
    [arr addObject:[self findProperties:class]];
    return [self findAllProperties:[class superclass] array:arr];
}

Trouver toutes les variables membres de la classe actuelle (à l'exception des classes parentes)

- (NSArray *)findIvars:(Class)class
{
    
    
    unsigned int numIvars;
    NSMutableArray *arr = [NSMutableArray array];
    Ivar *vars = class_copyIvarList(class, &numIvars);
    for(int i = 0; i < numIvars; i++) {
    
    
        Ivar iv = vars[i];
        NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(iv)];
        [arr addObject:ivarName];
    }
    return [arr copy];
}

Trouver toutes les variables membres de la classe actuelle (y compris les classes parentes)

- (NSArray *)findAllIvars:(Class)class array:(NSMutableArray *)arr
{
    
    
    if (class == [NSObject class]) {
    
    
        [arr addObjectsFromArray:[self findIvars:[NSObject class]]];
        return arr;
    }
    
    [arr addObject:[self findIvars:class]];
    return [self findAllIvars:[class superclass] array:arr];
}

Trouver toutes les méthodes de la classe actuelle (à l'exception des classes parentes)

- (NSArray *)findMethods:(Class)class
{
    
    
    unsigned int numMethods;
    NSMutableArray *arr = [NSMutableArray array];
    Method *methods = class_copyMethodList(class, &numMethods);
    for (int i = 0; i < numMethods; i++) {
    
    
        Method method = methods[i];
        SEL selector = method_getName(method);
        NSString *name = NSStringFromSelector(selector);
        [arr addObject:name];
    }
    return [arr copy];
}

Trouver toutes les méthodes de la classe actuelle (y compris les classes parentes)

- (NSArray *)findAllMethods:(Class)class array:(NSMutableArray *)arr
{
    
    
    if (class == [NSObject class]) {
    
    
        [arr addObjectsFromArray:[self findMethods:[NSObject class]]];
        return arr;
    }
    
    [arr addObject:[self findMethods:class]];
    return [self findAllMethods:[class superclass] array:arr];
}

Trouver tous les protocoles de la classe actuelle (hors classes parents)

- (NSArray *)findProtocols:(Class)class
{
    
    
    unsigned int numProtocols = 0;
    NSMutableArray *arr = [NSMutableArray array];
    Protocol * __unsafe_unretained * protocols = class_copyProtocolList(class, &numProtocols);
    for (int i = 0; i < numProtocols; i++) {
    
    
        Protocol *p = protocols[i];
        NSString *protocolName = [NSString stringWithUTF8String:protocol_getName(p)];
        [arr addObject:protocolName];
    }
    return [arr copy];
}

Trouver tous les protocoles de la classe actuelle (y compris les classes parentes)

- (NSArray *)findAllProtocols:(Class)class array:(NSMutableArray *)arr
{
    
    
    if (class == [NSObject class]) {
    
    
        [arr addObjectsFromArray:[self findProtocols:[NSObject class]]];
        return arr;
    }
    
    [arr addObject:[self findProtocols:class]];
    return [self findAllProtocols:[class superclass] array:arr];
}

Guess you like

Origin blog.csdn.net/u011608357/article/details/128058911
Recommended