利用runtime机制查询私有属性以及更改私有属性的值
1、KVC
创建Person类
#import "Person.h"
@interface Person()
@property(nonatomic,strong)NSString * string;
@end
@implementation Person
@end创建Person对象,利用KVC进行查询更改
Person * p = [[Person alloc]init];
[p setValue:@"狗娃" forKey:@"string"];
NSLog(@"%@",[p valueForKey:@"string"]);
结果:
2017-02-22 17:08:41.318 wwwwwwwwwwww[4947:1708545] 狗娃
2、利用runtime进行修改
Ivar vvvar = NULL;
unsigned int count = 0;
Ivar * ivars = class_copyIvarList([Person class], &count);
for (int i=0; i<count; i++) {
Ivar var = ivars[i];
const char * name = ivar_getName(var);
const char *nameType = ivar_getTypeEncoding(var);
NSLog(@"%s-------%s",name,nameType);
if (strcmp(name, "_string") == 0) {
vvvar = var;
break;
}
}
NSString * str = object_getIvar(p, vvvar);
NSLog(@"%@",str);
object_setIvar(p, vvvar, @"章子怡");
str = object_getIvar(p, vvvar);
NSLog(@"%@",str);
结果:
2017-02-22 17:08:41.318 wwwwwwwwwwww[4947:1708545] 狗娃
2017-02-22 17:08:41.318 wwwwwwwwwwww[4947:1708545] _string-------@"NSString"
2017-02-22 17:08:41.318 wwwwwwwwwwww[4947:1708545] 狗娃
2017-02-22 17:08:41.318 wwwwwwwwwwww[4947:1708545] 章子怡