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

转载于:https://www.cnblogs.com/AirStark/p/8025032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值