Skip to content
Kevin775263419 edited this page Mar 12, 2019 · 1 revision

KVC的简介

  • KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性
  • 常见的API有
    • - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
    • - (void)setValue:(id)value forKey:(NSString *)key;
    • - (id)valueForKeyPath:(NSString *)keyPath;
    • - (id)valueForKey:(NSString *)key;

setValue:forKey:的原理

setValue:forKey: 查看accessInstanceVariablesDirectly方法的返回值(YES) 调用报错NSUnknownKeyException
setKey:、_setKey:查看set方法 _key、_isKey、key、isKey查找成员变量 没有找到成员变量
传递参数,调用方法 直接赋值
  1. 调用setValue:forKey的时候,第一次先去查看是否有setKey:、_setKey等set方法。如果有直接赋值,如果没有直接进行第二步。
  2. 如果accessInstanceVariablesDirectly的返回值为YES,也就是可以访问class的成员变量的返回值为YES,就会直接进行访问成员变量,如果返回的变量有这种一样的,key、_isKey、key、isKey。进行成员变量直接进行赋值。如果accessInstanceVariablesDirectly返回的值为NO,或者找不到类似的成员变量就会直接进行第三部。
  3. 报错处理,NSUnknownKeyException

valueForKey:的原理

  • 同setValue:forKey的原理基本一致,setter方法,改为getter方法。其他的一样