Objective-C查找类的属性/成员变量/方法/协议

查找当前类所有属性(不包括父类)

- (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];
}

查找当前类所有属性(包括父类)

- (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];
}

查找当前类所有成员变量(不包括父类)

- (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];
}

查找当前类所有成员变量(包括父类)

- (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];
}

查找当前类所有方法(不包括父类)

- (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];
}

查找当前类所有方法(包括父类)

- (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];
}

查找当前类所有协议(不包括父类)

- (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];
}

查找当前类所有协议(包括父类)

- (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];
}

猜你喜欢

转载自blog.csdn.net/u011608357/article/details/128058911