访问某个对象中的私有变量,我现在知道有两种,如有其它方法,希望大家多多指教(手动抱拳)
方法一:KVO
- 新建
model
类
- 在外部访问私有变量
方法二:Runtime
首先导入
#import <objc/runtime.h>
通过C方法获取对象的成员变量
class_getInstanceVariable(Class_Nullablecls,constchar*_Nonnullname)
参数分别是 被访问的实例对象 对象的成员变量的名称
- 给成员变量赋值
object_setIvar(id_Nullableobj, Ivar_Nonnullivar, id_Nullablevalue)
参数分别是 被访问的实例对象 对象的成员变量的名称 所需赋的值
- 读取成员变量的值
object_getIvar(id_Nullableobj, Ivar_Nonnullivar)
参数分别是 被访问的实例对象 对象的成员变量的名称
- 遍历出所有成员对象
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);