最后看一下调用
NSDictionary *responseDictionary = [completedOperation responseJSON];
User *user = [[User alloc] initWithDictionary:responseDictionary];这就是KVO的能力,比之前自己去解析json做数据对应简单多了,同时如果服务器发送过来的json键名发生了变动,NSLog语句就会把未定义的键输出到控制台,而不会崩溃。
在派生类中添加用于处理深复制的方法也是非常好的。只需要覆盖NSCopying和NSMutableCopying中的方法就可以了
KVC还有很多有用的地方,简单了解一下:
key就是确定对象某个值的字符串,它通常和accessor方法或是变量同名,并且必须以小写字母开头。Key path就是以“.”分隔的key,因为属性值也能包含属性。比如我们可以person这样的key,也可以有key.gender这样的key path。
获取属性值时可以通过valueForKey:的方法,设置属性值用setValue:forKey:。与此同时,KVC还对未定义的属性值定义了 valueForUndefinedKey:,你可以重载以获取你要的实现(补充下,KVC定义在NSKeyValueCoding的非正式协议里)。
在O-C 2.0引入了property,我们也可以通过.运算符来访问属性。下面直接看个例子:@property NSInteger number;
instance.number =3;
[instance setValue:[NSNumber numberWithInteger:3] forKey:@"number"];
注意KVC中的value都必须是对象。
以上介绍了通过KVC来获取/设置属性,接下来要说明下实现KVC的访问器方法(accessor method)。Apple给出的惯例通常是:
-key:,以及setKey:(使用的name convention和setter/getter命名一致)。对于未定义的属性可以用setNilValueForKey:。