美文网首页
OC中 KVC 与 KVO的区别

OC中 KVC 与 KVO的区别

作者: JakieZhang | 来源:发表于2017-06-21 10:35 被阅读75次

    之前对于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方法

    相关文章

      网友评论

          本文标题:OC中 KVC 与 KVO的区别

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