标签:io ar strong for 文件 cti log on c
什么是KVO?
KVO应该是key-value-observer,意思就是键值观察。作用就是用一个对象A监测对象B,如果对象B属性发生变化,那么就会发送一个消息给对象A,这样……呃,就这样了。至于拿到通知后怎么处理,那是后话。
举例:创建一个Child类(初始化后开启定时器把一个happValue值从100自减1),再创建一个Nurse类,并且在这个Nurse里面初始化一个Child类的对象,然后对这个Child类的对象增减一个观察,观察它的hapyValue值,如果变化,则出发一个方法来输出需要的结果。
(1)Child.h和Child.m
//Child.h文件 #import <Foundation/Foundation.h> @interface Child : NSObject @property(nonatomic,assign)NSInteger happyValue; @end
//Child.m文件 #import "Child.h" @implementation Child -(id)init{ //初始化为100,并设立一个定时器,每隔1秒钟调用Action方法来自减happyValue self=[super init]; if (self!=nil) { self.happyValue=100; [NSTimer timerWithTimeInterval:1 target:self selector:@selector(Action:) userInfo:nil repeats:YES]; } return self; } //Action方法是自减happyValue值 -(void)Action:(NSTimer *)timer{ self.happyValue--; } @end
//Nurse.h文件 #import <Foundation/Foundation.h> @class Child; @interface Nurse : NSObject @property(nonatomic,retain) Child *child; -(id)initWithChild:(Child *)child; @end
//Nurse.m文件 #import "Nurse.h" #import "Child.h" @implementation Nurse -(id)initWithChild:(Child *)child{ self=[super init]; if (self!=nil) { //初始化一个child对象_child _child=child; //给这个_child添加一个观察,即观察_child对象的happyValue值,并且输出变化后的新值,把options的选项里地New改成Old就是旧值,也可以用|把两个都输出 [_child addObserver:self forKeyPath:@"happyValue" options:NSKeyValueObservingOptionNew context:@"xxx"]; } return self; } //当被观察的值发生变化,上面那个添加的观察就会生效,而生效后下一步做什么,由下面这个是方法决定,下面是意思是输出变化值,即change -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ NSLog(@"%@",change); } @end
#import <Foundation/Foundation.h> #import "Child.h" #import "Nurse.h" int main(int argc, const char * argv[]) { @autoreleasepool { Child *child=[[Child alloc]init]; Nurse *nurse=[[Nurse alloc]initWithChild:child]; [[NSRunLoop currentRunLoop]run]; } return 0; }
目的是Nurse类来监测Child类的happyValue值是否变化,如变化则输出变化后的新值。
主要流程:
a:在Nurse类里给Child的对象设置一个观察addObserver;
b:当这个值发生变化了,那么就会触发这个观察;
c:触发之后就会调用observeValueForKeyPath,这个方法可以返回你需要的值。
【OC学习-32】KVO-用一个对象监控另一个对象的属性,如有变化,则输出需要的结果
标签:io ar strong for 文件 cti log on c
原文地址:http://blog.csdn.net/weisubao/article/details/39179883