objective-c介绍
1、KVC
KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor方法或是点(.)直接访问成员对象的属性。例如访问一个对象属性我们可以 person.age 也可以通过kvc的方式 [person valueForKey:@\
key就是确定对象某个值的字符串,也就是属性的名称,它通常和accessor方法或是变量同名,并且必须以小写字母开头。Key path就是以“.”分隔的key,因为属性值也能包含属性。比如我们可以person这样的key,也可以有key.gender这样的key path。 获取属性值时可以通过valueForKey:的方法,设置属性值用setValue:forKey:。与此同时,KVC还对未定义的属性值定义了 valueForUndefinedKey:,你可以重载以获取你要的实现(补充下,KVC定义载NSKeyValueCoding的非正式协议里)。注意的是KVC的Value都必须是对象。
在O-C 2.0引入了property,我们也可以通过.运算符来访问属性。下面直接看个例子: @property NSInteger number;
instance.number =3;
[instance setValue:[NSNumber numberWithInteger:3] forKey:@\];
以上介绍了通过KVC来获取/设置属性,接下来要说明下实现KVC的访问器方法(accessor method)。Apple给出的惯例通常是:
-key:,以及setKey:(使用的name convention和setter/getter命名一致)。对于未定义的属性可以用setNilValueForKey:。
至此,KVC的基本概念你应该已经掌握了。之所以是基本,因为只涉及到了单值情况,kvc还可以运用到对多关系,这里就不说了,留给各位自我学习的空间。 2、KVO
既然我们能用KVC访问属性,当这个属性的值发生变化时,我们也能很好的监听。当然这个过程系统已经给我们实现了。我们不需要写过多的代码,只需要注册这个监听,就能很好的监听属性的值发生变化。Kvo是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码。这种观察-被观察模型适用于这样的情况,比方说根据A(数 据类)的某个属性值变化,B(view类)中的某个属性做出相应变化。对于推崇MVC的cocoa而言,kvo应用的地方非常广泛。(这样的机制听起来类 似Notification,但是notification是需要一个发送notification的对象,一般是 notificationCenter,来通知观察者。而kvo是直接通知到观察对象。) 适用kvo时,通常遵循如下流程: 1 注册:
-(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context
keyPath就是要观察的属性值,options给你观察键值变化的选择,而context方便传输你需要的数据(注意这是一个void型)。
options是监听的选项,也就是说明监听泛黄的额字典包含什么值。有两个常用的选项:
NSKeyValueObservingOptionsNew 指返回的字典包含新值。 NSKeyValueObservingOptionsOld 值返回的字典包含旧值。
2 实现变化方法:
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context
change里存储了一些变化的数据,比如变化前的数据,变化后的数据;如果注册时context不为空,这里context就能接收到。