SFRuntimeModelParent类
@interface SFRuntimeModelParent : NSObject
///
@property (nonatomic, copy) NSString *name;
///
@property (nonatomic, assign) NSInteger age;
///
@property (nonatomic, assign) float height;
///
@property (nonatomic, strong) NSArray *arr;
///
@property (nonatomic, strong) NSObject *child0;
@end
SFRuntimeModelChild类
@interface SFRuntimeModelChild : SFRuntimeModelParent
///
@property (nonatomic, strong) NSString *foot;
@end
/*
获取父类, 返回Class
结果:
==SFRuntimeModelParent
*/
Class superClass = class_getSuperclass([SFRuntimeModelChild class]);
NSLog(@"==%@",superClass);
打印所有属性
/**
结果:
属性名称0=name
属性类型0=T@"NSString",C,N,V_name
属性名称1=age
属性类型1=Tq,N,V_age
属性名称2=height
属性类型2=Tf,N,V_height
属性名称3=arr
属性类型3=T@"NSArray",&,N,V_arr
属性名称4=child0
属性类型4=T@"NSObject",&,N,V_child0
*/
unsigned int count = 0;
// 1.得到属性列表
objc_property_t *properties = class_copyPropertyList([SFRuntimeModelParent class], &count);
for (int i = 0; i < count; i++) {
// 2.得到单个属性
objc_property_t property = properties[i];
// 3.得到属性名称
NSString *propertyName = @(property_getName(property));
NSLog(@"属性名称%d=%@",i,propertyName);
// 4.得到成员类型
NSString *attrs = @(property_getAttributes(property));
NSLog(@"属性类型%d=%@",i,attrs);
}
属性类型
/**
* 成员变量类型(属性类型)
*/
NSString *const MJPropertyTypeInt = @"i";
NSString *const MJPropertyTypeShort = @"s";
NSString *const MJPropertyTypeFloat = @"f";
NSString *const MJPropertyTypeDouble = @"d";
NSString *const MJPropertyTypeLong = @"l";
NSString *const MJPropertyTypeLongLong = @"q"; NSInterger
NSString *const MJPropertyTypeChar = @"c";
NSString *const MJPropertyTypeBOOL1 = @"c";
NSString *const MJPropertyTypeBOOL2 = @"b";
NSString *const MJPropertyTypePointer = @"*";
NSString *const MJPropertyTypeIvar = @"^{objc_ivar=}";
NSString *const MJPropertyTypeMethod = @"^{objc_method=}";
NSString *const MJPropertyTypeBlock = @"@?";
NSString *const MJPropertyTypeClass = @"#";
NSString *const MJPropertyTypeSEL = @":";
NSString *const MJPropertyTypeId = @"@"; 对象类型
& 代表strong修饰
C代表copy修饰
N代表noatomic修饰
网友评论