OC中 KVC 与 KVO的区别

之前对于KVC、KVO一直停留在概念层,很少去用到或者去仔细看怎么实现,昨天特意去查了一下相关的技术博客,自己学习的心得写一下:

一.  KVO 监听机制的建立:

1. 设置观察者对象,使用的方法是:

- (void)addObserver:(NSObject*)observer forKeyPath:(NSString*)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context;

各个参数解释:*@param observer 观察者(监听器)

                         *@param keyPath  属性名(要观察的属性)

                         *@param options

                         *@param context  传递的参数

2. 设置监听事件:使用的方法是:

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context

各个参数解释:*@param keyPath 哪个属性被改了

                         *@param object  哪个对象的属性被改了

                         *@param change  改成咋样

                         *@param context 当初addObserver时的context参数值

3. 取消监听:最好放在dealloc方法中

-(void)dealloc{    

[premoveObserver:selfforKeyPath:@"test"];

}

二、KVC就是键值编码,根本就是通过key获取想要的值Value 或者通过Key 设置相应的Value,而不是通过Setter、Getter方法访问

KVC的主要作用有: 1. 访问私有变量 

                                  2. 使用KVC直接访问NSArray 或者NSSet的属性值 

                                  3. 使用KVC将字典转化为Model 

KVC 主要的方法有:

获取值

valueForKey: 传入NSString属性的名字。

valueForKeyPath: 属性的路径,xx.xx

valueForUndefinedKey 默认实现是抛出异常,可重写这个函数做错误处理

修改值

setValue:forKey:

setValue:forKeyPath:

setValue:forUnderfinedKey:

setNilValueForKey: 对非类对象属性设置nil时调用,默认抛出异常。


总结:

            1.KVO底层实现原理是系统给当前类创建子类,在子类setter 方法调用父类的setter方法

推荐阅读更多精彩内容

  • 目录:1.KVC用法;2.KVC和对象的setter、getter方法的区别;3.key和keyPath的区别;4...
    伦伦子_f7b3阅读 331评论 0 1
  • KCV 其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value...
    TYM阅读 824评论 0 4
  • kvc简述 kvc即键值编码,在iOS中的应用主要体现在开发者通过key访问对象的属性或给对象的属性赋值。这样做最...
    RunnerFL阅读 282评论 0 0
  • 1.KVC 关于 KVC 和 KVO ,我之前的总结文章有写过,但是趋于表面,没有探究其内部真正的实现原理和进阶用...
    Liberalism阅读 584评论 0 5
  • 闲暇让人们找回自我 忙,心亡也。所以人们需要必要的闲暇,在日常的生活中抽出身来。 骤然在工作中闲下来,如何安排自己...
    石川河女神阅读 56评论 0 1
  • 不知道多久了 心情飘忽不定 既不安于现状 又无力改变现状 像猪一样吃吃睡睡 却无法像猪一样心安理得 我曾对周围狂热...
    Zty绝对不是一个名人阅读 139评论 1 1