OC runtime读取对象的所有成员变量

简介

runtime 是OC的底层逻辑, 可以 在程序运行的时候 去读取 对象的方法 和 属性, 并且篡改它们

具体流程

  1. 导入头文件
#import <objc/runtime.h>
  1. 读取对象的所有成员变量名
    //class_copyIvarList()方法 是C函数
    //参数1:要从哪个类中获取成员变量
    //参数2:属性名的数量, 是二级指针, 靠回传    
    unsigned int outCount;
    Ivar * varList = class_copyIvarList(self.class, &outCount);
    for (int i = 0; i < outCount; i++) {
        Ivar var = varList[i];
        //使用指定的方法 获取ivar类型中的 属性名
        const char *name = ivar_getName(var);
        NSString *pName = [NSString stringWithUTF8String:name];
        NSLog(@"%@", pName);
        //通过KVC拿值
        id obj = [self valueForKey:pName];
        //用完就要手动释放占据的内存
        free(varList);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OC最实用的runtime总结,面试、工作你看我就足够了! 前言runtime的资料网上有很多了,部分有些晦涩难懂...
    small_Sun阅读 4,413评论 1 12
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,806评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,572评论 0 7
  • 今天是军训的最后一天。 过完今天蔡教官就要走了。今天我们没有军训而是进行了一次消防演习,两个班用一个油桶。蔡教官先...
    张雨心阅读 2,241评论 1 1
  • 叶子落了又生 绿了又黄 你在他乡
    云妮yunni阅读 2,463评论 1 11