OC中KVC的注意点
Objective-C KVC的特殊处理
[obj setValue:@"Test" forKey:@"attr"];
背后逻辑:
1/ 先找obj的attr变量有没有对应的setter方法, 有的话执行setter逻辑
2/ 再找有没有_attr这个属性, 无论在@Interface中的还是在实现类中的_attr,有的话直接给_attr赋值
3/ 没有setter也没有_attr, 再找有没有attr, 有的话直接赋值
4/ 经过前三个步骤, 都没执行的话, 引发异常setValueForUndefyKey.
[obj valueForKey:@"attr"];
背后逻辑(大体同上):
1/ 找getter
2/ 找_attr
3/ 找attr
4/ 都没找到引发异常valueForUndefinedKey.
[obj setValue:nil forKey@"number"];
如果obj的number属性是一个基本数据类型(int/short/long...), 引发setNilForKey异常.
想要处理异常非常简单, 只要重写对应的异常方法就可以了, 分别是:
- (void)setValue:(id)value forUndefinedKey:(id)key{
// 写你的处理逻辑
}
- (void)valueForUndefinedKey:(id)value {
// 写你的逻辑
}
- (void)setNilValueForKey(id)key {
// 写你的逻辑
}