kvc

2018-12-25  本文已影响0人  yxibng

kvc

底层驱动NSKeyValueCoding 协议

NSKeyValueCoding

Getting Values

- valueForKey:
- valueForKeyPath:
- dictionaryWithValuesForKeys:
- valueForUndefinedKey:

Setting Values

- setValue:forKey:
- setValue:forKeyPath:
- setValuesForKeysWithDictionary:
- setNilValueForKey:
- setValue:forUndefinedKey:

ValidateValue

- validateValue:forKey:error:`
- validateValue:forKeyPath:error:`

一些总结

  1. 支持kvc的类需要实现NSKeyValueCoding协议,继承自NSObject的类,默认已经实现了协议的方法,直接支持kvc,你可以重写这些方法,提供自己的实现。
  2. 可以修改公开属性,也可以修改私有属性,私有的成员变量
  3. 访问一个不存在的key的值,- valueForUndefinedKey:会抛出NSUndefinedKeyException异常,要重写这个方法,做一些自己的处理
  4. 修改一个不存在的key的值,- setValue:forUndefinedKey:会抛出NSUndefinedKeyException异常,要重写这个方法,做一些自己的处理
  5. setNilValueForKey:去设置一个标量(如int, float, struct)的时候,会抛出 NSInvalidArgumentException异常,要重写这个方法,提供自己的处理(提供默认值或者生成一个值)
  6. 设置一个标量属性的值得时候,需要转换为NSValue
  7. +(BOOL)accessInstanceVariablesDirectly
    • 返回NO,禁止直接访问成员变量
    • 返回YES,可以直接访问成员变量
  8. 对集合对象的方便操作
    • Aggregation Operators
      • @avg
      • @count
      • @max
      • @min
      • @sum
    • Array Operators
      • @distinctUnionOfObjects
      • @unionOfObjects
    • Nesting Operators
      • @distinctUnionOfArrays
      • @unionOfArrays
      • @distinctUnionOfSets

示例代码

参考kvc_kvo

上一篇下一篇

猜你喜欢

热点阅读