iOS KVC / KVO原理探究

KVC

KVC的全程是 key-value-coding,键值编码是由NSKeyValueCoding非正式协议启用的一种机制,对象可以用过字符串来间接访问其属性

  • 1.按照顺序查找名为set<Key>(get), 或_set<key>(get)方法,如果找到,直接调用,如果没找到,进行下一步
  • 2.调用类方法 access Instance Variables Directly 方法,如果返回 yes,就寻找名为_<key>,_is<Key>,<key>,或者is<Key>的变量,如果找到,则直接使用输入值设置变量
  • 3.如果access Instance Variables Directly方法返回 no,则调用setValue:forUndefinedKey:,默认会抛出异常

KVC 的使用场景

  • 1.对象动态的取值和设值
  • 2.Model和字典转换
  • 3.用KVC来访问和修改私有变量

KVO

KVO 的原理:

  • 1.当属性第一次被观察时,系统利用RuntimAPI动态生成一个派生类(该类的子类),
  • 2.重写被观察属性的setter 方法。
  • 3.将isa指针指向派生类。

KVO是基于KVC,KVC是KVO 的入口,通过指定类的属性名称,来达到类属性值的变化,分为手动和自动俩种模式,
其中手动模式 需要在改变属性值的前后分别实现
WillChangeValueForKey
didChangeValueForKey
并且再类中实现方法
automaticallyNotifiesObserversForKey:(Nsstring *)

isa指针:Nsobject 的本质

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,795评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 提到KVC/KVO大家一定不会陌生,用起来也很简单,下面一起来探究一下它们的实现原理。 一、KVC 1、查找过程 ...
    Tamp_阅读 1,070评论 7 12
  • KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过K...
    暮年古稀ZC阅读 2,211评论 2 9
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,868评论 0 9