美文网首页OC进化iOS Developer
利用runtime获取私有属性名及类型

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

作者: 等待的风 | 来源:发表于2017-01-06 11:17 被阅读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);
            //并不能打印父类属性
        }
    }
    

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

    相关文章

      网友评论

        本文标题:利用runtime获取私有属性名及类型

        本文链接:https://www.haomeiwen.com/subject/exutbttx.html