iOS - 访问某个对象的私有变量

访问某个对象中的私有变量,我现在知道有两种,如有其它方法,希望大家多多指教(手动抱拳)

方法一:KVO

  • 新建model
01.png
  • 在外部访问私有变量
02.png

方法二:Runtime

  1. 首先导入 #import

  2. 通过C方法获取对象的成员变量

class_getInstanceVariable(Class_Nullablecls,constchar*_Nonnullname)

参数分别是 被访问的实例对象 对象的成员变量的名称

  1. 给成员变量赋值

object_setIvar(id_Nullableobj, Ivar_Nonnullivar, id_Nullablevalue)

参数分别是 被访问的实例对象 对象的成员变量的名称 所需赋的值

  1. 读取成员变量的值

object_getIvar(id_Nullableobj, Ivar_Nonnullivar)

参数分别是 被访问的实例对象 对象的成员变量的名称

03.png
  1. 遍历出所有成员对象
unsigned int outCount = 0;
    Ivar *ivars = class_copyIvarList([model class], &outCount);
    // 遍历所有成员变量
    for (int i = 0; i < outCount; i++) {
        // 取出i位置对应的成员变量
        Ivar ivar = ivars[I];
        NSString *objc_type = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
        Class class = NSClassFromString(objc_type);
        if ([class isKindOfClass:[NSString class]]) {
            //TODO
        }
        const char *name = ivar_getName(ivar);
        const char *type = ivar_getTypeEncoding(ivar);
        NSLog(@"成员变量名:%s 成员变量类型:%s",name,type);
    }
    // 注意释放内存!
    free(ivars);

你可能感兴趣的:(iOS - 访问某个对象的私有变量)