class_copyPropertyList
- 获取的是property声明的所有属性
class_copyIvarList
- 获取的是这个类所有的属性(property声明的属性)和成员变量(@interface大括号中声明的变量)
测试
image.png
- (void)getClassPropertyList{
id classobjc = objc_getClass([@"ViewController" UTF8String]);
unsigned int pCount = 0;
unsigned int iCount = 0;
// 获取当前类属性(property声明的属性)
objc_property_t *properties = class_copyPropertyList(classobjc, &pCount);
// 获取当前类属性(包含property声明属性和成员变量)
Ivar *ivars = class_copyIvarList(classobjc, &iCount);
NSLog(@"properties->%u,ivars->%u",pCount,iCount);
for (int i=0; i<pCount; i++) {
objc_property_t property = properties[i];
const char *cName = property_getName(property);
// 转换为OC字符串
NSString *propertyName = [NSString stringWithCString:cName encoding:NSUTF8StringEncoding];
NSLog(@"propertyName->%@",propertyName);
}
for (int i=0; i<iCount; i++) {
Ivar var = ivars[i];
NSString *ivarName = [NSString stringWithCString:ivar_getName(var) encoding:NSUTF8StringEncoding];
NSLog(@"ivarName->%@",ivarName);
}
}
打印结果
image.png
网友评论