KVC赋值、取值过程和异常处理

2018-10-12  本文已影响0人  小圆菜陪你财务自由

kvc的作用就不多说了,网上一大堆。这里主要介绍它的赋值和取值过程

赋值过程
  1. 先找相关方法 set<Key>:, _set<Key>:, setIs<Key>:
  2. 若没有相关方法 + (BOOL)accessInstanceVariablesDirectly,判断是否可以直接方法成员变量
  3. 如果是判断是NO,直接执行KVC的setValue:forUndefinedKey:(系统抛出一个异常,未定义key)
  4. 如果是YES,继续找相关变量_<key> 􏱞_is<Key>􏱞 <key> 􏱞is<Key>
  5. 方法或成员都不存在,setValue:forUndefinedKey:方法,默认是抛出异常
    相关实现可以参考demo
取值过程

取值的过程和赋值过程是一样的,可以通过demo查看

异常处理

异常主要有两种情况:

  1. 赋的值是空。如果给对象赋值nil没关系。可是给值类型(基本数据类型)赋值nil,会报错。但是不要怕,我们可以通过setNilValueForKey方法来捕获异常,当给非对象类型赋值为nil是会调用这个方法
  2. key不存在,这种情况又分为两种情况,第一:赋值的key不存在 ;第二:取值的key不存在。分别可以通过setValue:forUndefinedKey:方法和valueForUndefinedKey来捕获异常
上述两个方法只要在相应的类中进行重写即可

具体使用方法情可见demo

KVC正确性的验证

这里不做介绍,用的也少,有兴趣可以自己了解一下,
从validateValue方法入手。可以判断value的有效性,还有方法判断key的有效性。

上一篇 下一篇

猜你喜欢

热点阅读