首页 > 移动平台 > 详细

iOS开发--KVC&KVO

时间:2016-03-10 17:21:37      阅读:178      评论:0      收藏:0      [点我收藏+]

     KVC和KVO这两个词看起来很唬人的样子,很多人一开始接触的时候都不知道这是什么鬼,而且掌握了后又容易忘。所以在这里简单做个笔记,以备不时之需。下面分别介绍一下KVC和KVO的使用方法。

1.KVC

    KVC是Key-Value Coding的缩写,是键值编码的意思,它是一种可以直接通过字符串的名字(key)来访问类属性(实例变量)的机制。主要、、常用的是setValue:forKey:以及setValue:forKeyPath:这两个方法。

   (1)先来看下setValue:forKey:的用法。建一个测试类Person,头文件里有个年龄属性age。技术分享

   示例1: 在基类里我们可以直接通过setter方法或者setValue:forKey:方法对Person里的age成员赋值。 技术分享

   运行结果如下:

   技术分享

   示例2:我们也可通过getter方法或者valueForKey:方法来获取变量的值.

   技术分享

   运行结果如下:

   技术分享

   示例3:对于Person里的私有成员属性,我们只能通过setValue:forKey:和valueForKey:方法来进行赋值和获取。

   譬如在Person.m文件里声明一个name属性。

   技术分享  

   然后我们对其进行赋值或获值。

   技术分享

   运行结果如下:

   技术分享

   (2)再来看下setValue:forKeyPath:的用法。这是通过键路径来给变量赋值,可以简单理解为给类的成员的成员赋值。

        譬如说,我们在上面的基础上再建一个类Address,里面有一个address的成员属性,然后在Preson里面声明。

    技术分享

    技术分享

     示例1.给Person的Address成员里的address属性进行赋值。

     技术分享

     运行结果如下:

     技术分享

     示例2:通过getter或者valueForKeyPath:获取address的值。

     技术分享

     运行结果如下:

     技术分享

     对于私有成员属性,情况和上面类似,就不做过多赘述。

     注:当通过key来访问类成员属性的时候,会查找这个类里与key相匹配的实例变量(_key, key, _isKey, isKey)。比如说下面这句代码:  技术分享会匹配_name、name、_isName、isName这四个实例变量,当同时存在时,优先级为:_name>_isName>name>isName;当这四个实例变量都不存在时,通过valueForKey:或者valueForKeyPath: 这两个方法获取变量程序会报错。      

     这里对于KVC的简单介绍就完结了,如果需要了解setValue:forKey方法的实现原理,可以参考这篇文章:http://www.jianshu.com/p/d54af904967b

 

2.KVO

     KVO是Key-Value Observing的缩写,翻译为键值观察,是一种监听机制,当指定的对象的属性被修改后,则观察者就会接受到通知。

     KVO的使用步骤:给对象添加指定路径的观察者,设置观察者的监听回调,移除观察者

     (1)在上面的基础上,设置Person为观察者,观察其成员addr的address属性的变化。

    技术分享

     (2)重写回调方法,输出addr的address属性改变前后的值。

     技术分享

     (3)移除观察者

      技术分享

      然后我们改变两次addr的address属性。

      技术分享

      运行结果如下:

      技术分享

       这样KVO的简单流程就完成了。

iOS开发--KVC&KVO

原文:http://www.cnblogs.com/AnLoveHuan/p/5259109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!