使用Runtime获取第三方成员变量


我们使用第三方库,有时候需要获取其成员变量。方法如下:

导入runtime

#import <objc/runtime.h>

声明一个Person类

@interface Person : NSObject
{
    NSString *address;
}
@property(nonatomic,strong)NSString *name;
@property(nonatomic,assign)NSInteger age;

@end

使用runtime获取私有属性

//遍历获取Person类所有的成员变量IvarList
- (void) getAllIvarList {
    unsigned int methodCount = 0;
    Ivar * ivars = class_copyIvarList([Person class], &methodCount);
    for (unsigned int i = 0; i < methodCount; i ++) {
        Ivar ivar = ivars[i];
        const char * name = ivar_getName(ivar);
        const char * type = ivar_getTypeEncoding(ivar);
        NSLog(@"Person拥有的成员变量的类型为%s,名字为 %s ",type, name);
    }
    free(ivars);
}

打印结果如下:

2019-12-12 15:14:02.115744+0800 PersonRuntime[11576:1071364] Person拥有的成员变量的类型为@"NSString",名字为 address 
2019-12-12 15:14:02.115902+0800 PersonRuntime[11576:1071364] Person拥有的成员变量的类型为@"NSString",名字为 _name 
2019-12-12 15:14:02.115997+0800 PersonRuntime[11576:1071364] Person拥有的成员变量的类型为q,名字为 _age 

文章作者: 李佳
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 李佳 !
评论
 上一篇
OC 底层研究1--alloc和init原理 OC 底层研究1--alloc和init原理
本页所使用的objc runtime 756.2,来自GITHUB 1. 题目开始学习研究OC源码,今天看的是对象的初始化,也就是alloc以及init的分析。 2. 附流程图如下 3. 内容3.1引子我们先看一段代码,Person类
2019-12-16 李佳
下一篇 
Flutter 深入学习 Flutter 深入学习
引言Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
2019-10-31 李佳
  目录