利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法,就算是私有方法以及私有属性都是可以动态修改的。
#import <objc/runtime.h>
- (void)viewDidLoad {
[super viewDidLoad];
Person *onePerson = [[Person alloc] init];
// 获取对象的属性列表
unsigned int count = 0;
Ivar *members = class_copyIvarList([Person class], &count);
for (int i = 0; i < count; i++){
Ivar var = members[i];
const char *memberAddress = ivar_getName(var); // 属性名
const char *memberType = ivar_getTypeEncoding(var); // 类型
NSLog(@"address = %s ; type = %s",memberAddress,memberType);
}
// 修改私有变量
Ivar m_address = members[1];
object_setIvar(onePerson, m_address, @"朝阳公园");
NSLog(@"second time : %@",[onePerson description]);
}
复制代码
获取私有方法列表
- (void)private{
unsigned int count = 0;
Method *memberFuncs = class_copyMethodList([Person class], &count);
for (int i = 0; i < count; i++){
SEL address = method_getName(memberFuncs[i]);
NSString *methodName = [NSString stringWithCString:sel_getName(address) encoding:NSUTF8StringEncoding];
NSLog(@"member method : %@",methodName);
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END