美文网首页
KVO和KVC理解

KVO和KVC理解

作者: Ryan_RH | 来源:发表于2017-02-20 10:45 被阅读0次

     一、KVO(Key-Value-Observing)

    键值观察者模式,说白了就是当你监听的值发生变化时,会收到对应的通知。


    一般分为三步:

    注册监听

    使用方法:

    1.添加KVO监听者

    **@paramobserver 观察者(监听器)

    *@paramkeyPath  属性名(要观察的属性)

    *@paramoptions

    *@paramcontext  传递的参数*/

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

    例子:

    //为对象p添加一个观察者(监听器)[p addObserver: self  forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"test"];

    2.设置监听事件

    /** *  当利用KVO监听到某个对象的属性值发生了改变,就会自动调用这个

     * *@paramkeyPath 哪个属性被改了 

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

    *@paramchange  改成咋样

     *@paramcontext 当初addObserver时的context参数值 */

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

     NSLog(@"%@ %@ %@ %@", object, keyPath, change, context);

    }

    3.取消监听

    //释放KVO监听

    -(void)dealloc{    

    [p removeObserver: self forKeyPath:@"test"];

    }


    二、KVC(Key-Value-Coding)

    键值编码模式,说白了就是通过指定的key获得想要的值value,而不是通过调用Setter、Getter方法访问。


    1 .访问私有变量

    一个类中的私有变量,不能直接通过Setter、Getter方法访问。但是却可以通过KVC来访问。

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

    3. 使用KVC将字典(json)转化成模型


    注意:

    (1). key的值必须正确,如果拼写错误,会出现异常

    (2). 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来

    (3). 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去

    (4). NSArray/NSSet等都支持KVC

    相关文章

      网友评论

          本文标题:KVO和KVC理解

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