runtime-访问/修改 私有属性

利用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
喜欢就支持一下吧
点赞0 分享