在有些时候我们需要通过KVC去修改某个类的私有变量,但是又不知道该属性是否存在,如果类中不存在该属性,那么通过KVC赋值就会crash,这时也可以通过运行时进行判断。同样我们在NSObject的分类中增加如下方法。
/**
* 判断类中是否有该属性
*
* @param property 属性名称
*
* @return 判断结果
*/
-(BOOL)hasProperty:(NSString *)property {
BOOL flag = NO;
u_int count = 0;
Ivar *ivars = class_copyIvarList([self class], &count);
for (int i = 0; i < count; i++) {
const char *propertyName = ivar_getName(ivars[i]);
NSString *propertyString = [NSString stringWithUTF8String:propertyName];
if ([propertyString isEqualToString:property]){
flag = YES;
}
}
}