自己最近在学习runtime,希望在学习过程中做些记录,方便自己后来温习查阅。也希望能帮助到别的同学。
在你的model中直接使用以下方法
好了,直接上代码
-(instancetype)initWithDictionary:(NSDictionary *)dic
{
if (self = [super init])
{
NSMutableArray *keys = [NSMutableArray array];
unsigned int property_count;
// 获取属性列表,注意入参
objc_property_t *properties = class_copyPropertyList([self class], &property_count);
for (int i = 0; i< property_count; i++)
{
objc_property_t property = properties[i];
//通过property_getName 函数获取属性名字
NSString *peopertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
[keys addObject:peopertyName];
}
//释放properties指向的内存
free(properties);
for (NSString *key in keys)
{
if ([dic valueForKey:key] == nil)
continue;
[self setValue:[dic valueForKey:key] forKey:key];
}
}
return self;
}
代码很简单。
使用class_copyPropertyList()函数获取属性列表,入参为class和一个int数据的地址。代用该函数会修改这个int参数。可以通过property_getName 函数获取属性名字,通过property_getAttribute 函数获取属性。
网友评论