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

在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);
        //并不能打印父类属性
    }
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,387评论 30 472
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,087评论 7 64
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 5,679评论 0 4
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    small_Sun阅读 3,218评论 0 4
  • 今天看了一点《管理时间幸福学》,我觉得一句话很对,你的娱乐方式,可能正在悄悄地改变你。人为什么要娱乐呢,当你感到巨...
    Tdeskmate阅读 1,137评论 0 0