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 {
  // 写你的逻辑
}

posted on 2017-12-11 21:06  KeplerAir  阅读(106)  评论(0编辑  收藏  举报