OC进化iOS Developer

利用runtime获取私有属性名及类型

2017-01-06  本文已影响0人  等待的风

在iOS中没有绝对的私有属性,虽然没有办法直接访问私有属性,但是可以利用kvc,kvo间接访问私有属性。使用kvc,kvo的前提是知道属性名,下面这个方法就是如何获取属性的变量名及类型。
使用runtime之前要先导入

#import <objc/runtime.h>

然后使用下面这个方法

- (void)printIvar:(Class)class {
    // count记录变量的数量IVar是runtime声明的一个宏
    unsigned int count = 0;
    // 获取类的所有属性变量
    Ivar *menbers = class_copyIvarList(class, &count);
    NSLog(@"count : %i",count);
    for (int i = 0; i < count; i++) {
        Ivar var = menbers[i];
        // 将IVar变量转化为字符串,这里获得了属性名和类型
        const char *memberName = ivar_getName(var);
        const char *memberType = ivar_getTypeEncoding(var);
        NSLog(@"%s----%s", memberName, memberType);
        //并不能打印父类属性
    }
}

需要注意的是,该方法并不会打印父类的属性。

上一篇下一篇

猜你喜欢

热点阅读