KVO&KVC

KVO

KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变,被监听的类会创建继承于被监听类的子类,然后将被监听类的isa指针指向子类,子类的方法比父类多了class dealloc isKVO3个方法,在子类的set方法里会调用_NSSet*AndNotify方法
_NSSet*AndNotify的内部实现

  1. 调用willChangeValueForKey:
  2. 调用原来的setter实现
  3. 调用didChangeValueForKey:

didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:方法

KVC

KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性

setValue:forKey:调用流程
  1. 按照setKey:、_setKey:
  2. 如果找不到setKey:、_setKey:方法,则查看accessInstanceVariablesDirectly方法的返回值(默认返回yes)
  3. 如果accessInstanceVariablesDirectly方法返回yes则按照_key、_isKey、key、isKey顺序查找成员变量,找到成员变量则赋值
  4. 如果accessInstanceVariablesDirectly方法返回no则调用setValue:forUndefinedKey:并抛出异常NSUnknownKeyException
valueForKey:调用流程
  1. 按照getKey、key、 isKey、_key顺序查找方法
  2. 如果没找打方法则查看accessInstanceVariablesDirectly方法的返回值(默认返回yes)
  3. 如果accessInstanceVariablesDirectly方法返回yes则按照_key、_isKey、key、isKey顺序查找成员变量
  4. 返回no调用valueForUndefinedKey:并抛出异常NSUnknownKeyException
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • KVO 是(Key-valueObserve) Objective-C 对观察者模式(Observer Patte...
    知之未道阅读 1,657评论 0 0
  • 【原创博文,转载请注明出处!】之前做iOS开发的时候经常使用KVO来监听对象属性值的变化去执行一些操作,但是从未思...
    RephontilZhou阅读 4,776评论 1 9
  • KVO(Key Value Observing) 键值观察,苹果提供的一套事件通知机制 KVO用于监听对象某个属性...
    QYCD阅读 3,579评论 0 0
  • 1. KVO 一.KVO原理的使用与证明 我们在开发的过程中经常使用KVO和KVC,但是我们并不了解其底层原理和功...
    周灬阅读 4,310评论 0 9
  • 一、KVO KVO 的全称是 Key-Value Observing,俗称 “键值监听”,可以用于监听某个对象属性...
    凡几多阅读 4,375评论 0 3

友情链接更多精彩内容