美文网首页
KVC和KVO的使用解读

KVC和KVO的使用解读

作者: Sweet丶 | 来源:发表于2017-12-20 17:32 被阅读5次

使用都比较简单不需要更多的啰嗦,所以这里整理了一下他们的内部原理,这样会在使用的时候少一些bug

一、基本介绍

1. KVC,即 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。KVC赋值取值的顺序:

1. 用 KVC 取值或赋值,会优先调用这个属性的 setter 和 getter 方法来赋值。

2. 如果找不到 setter 和 getter 方法,则会优先查找带下划线的属性进行赋值。

3. 如果找不到带下划线的属性,则会查找不带下划线的属性进行赋值。

4. 如果都找不到,则会崩溃 :   setValue: forUndefinedKey:

5. 要想在找不到key的时候不崩溃需要在.m中实现方法- (void)setValue:(id)value forUndefinedKey:(NSString *)key

2. KVO,即Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,对象就会接受到通知,前提是执行了setter方法、或者使用了KVC赋值,是Objective-C 对观察者设计模式的一种实现,另一种是通知机制。其内部实现原理是利用oc的runtime特性动态创建了一个子类,并重写了keypath的setter方法

-(void)setName:(NSString *)newName{

[self willChangeValueForKey:@"name"];//KVO在调用存取方法之前总调用

[super setValue:newNameforKey:@"name"];//调用父类的存取方法

[self didChangeValueForKey:@"name"];//KVO在调用存取方法之后总调用

}

二、与通知、代理的比较

KVO和Notification的比较:都是一对多,通知多了手动发送这一步;KVO适用于属性变化的监听,通知没有这个局限性

KVO及通知与Delegate的比较:代理可以获取返回值,代理是1V1的

相关文章

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • ios基础——KVO、KVC

    KVO和KVC常见问题: 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.KVC和KVO的使用场景4....

  • KVC和KVO的使用解读

    使用都比较简单不需要更多的啰嗦,所以这里整理了一下他们的内部原理,这样会在使用的时候少一些bug 一、基本介绍 1...

  • 关情纸尾---UIKit基础-简述KVC和KVO

    ♥概述 ♥键值编码KVC ♥点语法和KVC ♥ 键值监听KVO ♥KVO的使用步骤也比较简单:

  • KVC-KVO

    https://github.com/leejayID/KVC-KVO 此文章详细介绍了KVC和KVO的使用,适合...

  • KVC,KVO

    主要分成一下几个部分1.KVC1.1 KVC简介1.2 KVC使用2.KVO2.1 KVO简介2.2 KVO使用 ...

  • KVC内部原理?KVC和KVO关系?

    KVC都不陌生,多多少少都用过,那么KVC内部原理是怎样的?KVC和KVO什么关系?使用KVC赋值会触发KVO吗?...

  • 02-03、图片的拉伸、KVC和KVO的使用

    1、图片拉伸 2、KVC的使用 KVC: Key Value Coding(键值编码) 3、KVO的使用 KVO:...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

网友评论

      本文标题:KVC和KVO的使用解读

      本文链接:https://www.haomeiwen.com/subject/miugwxtx.html