iOS获取类的属性,实例方法,类方法,代理

/// 获取属性
/// @param class <#class description#>
- (void)getProperty:(Class)class
{
    unsigned int count = 0;
    Ivar *members = class_copyIvarList(class, &count);
    for(int i = 0; i < count; i++)
    {
        Ivar ivar = members[i];
        const char *memberName = ivar_getName(ivar);
        const char *memberType = ivar_getTypeEncoding(ivar);
        //依次打印属性名称和属性类型
        NSLog(@"%s : %s", memberName, memberType);
//        if(strcmp(memberName, "_title") == 0) {
//            // 修改前
//            NSString *name = (NSString *)object_getIvar(vc, members[i]);
//            NSLog(@"-name:%@", name);
//            // 修改后
//            object_setIvar(vc, members[i], @"Hello");
//            NSString *nameReset = (NSString *)object_getIvar(vc, members[i]);
//            NSLog(@"-nameReset:%@", nameReset);
//            break;
//        }
    }
    free(members);
}

/// 获取实例方法
/// @param class <#class description#>
- (void)getMethod:(Class)class
{
    unsigned int count;
    Method *methods = class_copyMethodList(class, &count);
    for (int i = 0; i < count; i++)
    {
        Method method = methods[i];
        SEL selector = method_getName(method);
        NSString *name = NSStringFromSelector(selector);
        NSLog(@"实例方法:%@",name);
    }
    free(methods);
}

/// 获取类方法
/// @param class <#class description#>
- (void)getClassMethod:(Class)class
{
    unsigned int count;
    Method *classMethods = class_copyMethodList(class, &count);
    for (int i = 0; i < count; i++)
    {
        Method classMethod = classMethods[i];
        SEL selector = method_getName(classMethod);
        NSString *name = NSStringFromSelector(selector);
        NSLog(@"类方法:%@",name);
    }
    free(classMethods);
}

/// 获取代理方法
/// @param protocol <#protocol description#>
- (NSArray<NSString *> *)methodListWithProtocol:(Protocol *)protocol {
    unsigned int count = 0;
    NSMutableArray<NSString *> *methodList = @[].mutableCopy;
    struct objc_method_description *methods = protocol_copyMethodDescriptionList(protocol, YES, YES, &count);
    for (unsigned int i = 0; i < count; i++)
    {
        struct objc_method_description method = methods[i];
        NSString *name = NSStringFromSelector(method.name);
        [methodList addObject:name];
    }
    free(methods);
    return methodList;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值