您的位置:首页 > 移动开发 > IOS开发

KVC和KVO

2015-12-14 16:07 274 查看
1、KVC的基本用法:
KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字来访问属性的机制。使用该机制不需要调用存取方法和变量实例就可以访问对象属性。本质上讲,键-值编码定义了你的程序存取方法需要实现的样式以及方法签名。
键-值编码方法在OC非标准协议(类目)NSKeyValueCoding中被声明,默认的实现方法有NSObject提供。
键-值编码支持带有对象值得属性,同时也支持纯数值类型和结构,非对象参数和返回类型全部被识别并自动封装/解封。
2、KVC的设置和访问
键-值编码中的基本调用包括-valueForKey:和-setValue: forkey:这两个方法,它们以字符串的形式向对象发送消息,字符串是我们关注属性的关键。



是否存在setter、getter方法,如果不存在,它将在内部查找名为_key或key的实例变量。通过KVC,可以获取不存在getter方法的对象值,无需通过对象指针直接访问。

这里我们需要注意,当我们通过setValue: forKey: 设置对象的值,或通过valueForKey来获取对象的值时,如若对象的实例变量为基本数据类型时(char、int、float、BOOL),我们需要对基本数据进行封装。

3、KVC路径与一对多的关系
路径:除了通过键-值设置外,键-值编码还支持指定路径,像文件系统一样。用“点”号隔开。



4、一对多的关系
如果向NSArray请求一个键值,它实际上会查询数组中的每个对象来查找这个键值,然后将查询结果打包到另一个数组中并返回给你。



5、KVC的简单运算
此外,还可以应用一些字符做简单运算。sum、min、max、avg、count



KVC的缺点,你感觉到了吗?
6、KVO的基本概念
Key Value Observing,只译为:基于键值的观察者。它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
与NSNotification不同,键-值观察中并没有所谓的中心对象来为所有观察者提供变化通知。取而代之的,当有变化发生时,通知被直接发送至处于观察状态的对象。NSObject提供这种基础的键-值观察实现方法。
你可以观察任意对象属性,包括简单属性,对一或是对多关系,对多关系的观察者将会被告知发生变化的类型,也就是任意发生变化的对象。
键-值观察为所有对象提供自动观察兼容性。你可以通过禁用自动观察通知并实现通知来筛选通知。
7、注册观察者
为了正确接收属性的变更通知,观察对象必须首先发送一个addObserver:forKeyPath: options: context: 消息至被观察对象,用以传送观察对象和需要观察的属性的关键路径,以便与其注册。选项参数指定了发送变更通知时提供给观察者的信息。使用NSKeyValueObservingOptionOld选项可以将初始化对象以变更字典中的一个项的形式提供给观察者,指定NSKeyValueObservingOptionNew选项可以将新的值以一个项的形式添加至变更字典。你可以使用逐位“|”这两个常量来指定接收上述两种类型的值。



8、接收变更通知
当对象的一个被观察者属性发生变动时,观察者收到一个observeValueForKeyPath: ofObject: change: context:
消息。所有观察者都必须实现这一方法。触发观察通知的对象和键路径、包含变更细节的字典,以及观察者注册时提交的上下文指针均被提交给观察者,context可以为任意类型参数。



9、移除观察者身份
你可以发送一条指定观察方对象和键路径的removeObserve:forKeyPath:消息至被观察的对象,来移除一个键-值观察者。(当我们达到目的时)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios开发 编码