在iOS中没有绝对的私有属性,虽然没有办法直接访问私有属性,但是可以利用kvc,kvo间接访问私有属性。使用kvc,kvo的前提是知道属性名,下面这个方法就是如何获取属性的变量名及类型。
使用runtime之前要先导入
#import <objc/runtime.h>
然后使用下面这个方法
- (void)printIvar:(Class)class {
// count记录变量的数量IVar是runtime声明的一个宏
unsigned int count = 0;
// 获取类的所有属性变量
Ivar *menbers = class_copyIvarList(class, &count);
NSLog(@"count : %i",count);
for (int i = 0; i < count; i++) {
Ivar var = menbers[i];
// 将IVar变量转化为字符串,这里获得了属性名和类型
const char *memberName = ivar_getName(var);
const char *memberType = ivar_getTypeEncoding(var);
NSLog(@"%s----%s", memberName, memberType);
//并不能打印父类属性
}
}
需要注意的是,该方法并不会打印父类的属性。
网友评论