程序员

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

2016-10-26  本文已影响0人  wlwl123

简介

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);
}
上一篇下一篇

猜你喜欢

热点阅读