KVC
key-Value Coding,看起来像键值对的东西。其实它是一种非正式的协议,用来间接访问对象属性的。
可以说一个对象的属性,就可以用KVC这种方式,访问或者设置。
使用 valueForKey可以取出类属性的值,这点联想到取的ISA指针,应该和这个有关。
Person.h
@interface Person : NSObject
@property int age;
@property NSString *name;
@end
Person.m
#import "Person.h"
@implementation Person
@end
main.h
Person * person = [[Person alloc] init];
person.name =@"Jimm";
NSString *name= [person valueForKey:@"name"];
NSLog(@"%@",name);
用setValue forKey可以把类的属性值替换掉。
Person * person = [[Person alloc] init];
person.name =@"Jimm";
NSString *name= [person valueForKey:@"name"];
[person setValue:@"Timmy" forKey:@"name"];
NSLog(@"%@",name);
return 0;
KVO
建立在KVC之上,用来看值的变化的。
watchPersonForChangeOfAddress: 观察值地址的变化
observeValueForKeyPath:ofObject:change:context: 在被观察的 key path 的值变化时调用
dealloc 停止观察
kvc原理,观察者模式分析
http://www.cppblog.com/kesalin/archive/2012/11/17/kvo.html