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];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值