Objective-C学习笔记(4-7)
目录
04监视方式
Protocol
用protocol实现的delegate。其实我觉得这个就是观察者,只不过默认情况下是单一的观察者。具体方法不总结了。
有什么方法可以一次性存放多个delegate?这样就可以用数组方法一口气通知完:
[array makeObjectsPerformSelector:@selector(doSomething:) withObject:aObject];
如果写N个变量第一比较罗嗦第二也不知道运行时会有多少个观察者。但问题在于NSArray和NSMutableArray不能存指针之外的对象,protocol实例不认。
KVO
KVO,也就是Key-Value Observer,是除了protocol和notification之外的又一种属性监视方式
监视别人的类重载一个方法,用于观察值变化
- (void) observeValueForKeyPath:(NSString*)aPath ofObject:(id)anObject change:(NSDictionary*)aChange context:(void*)aContext {
NSLog( @"%@ has observered key %@ change in %@, from %@ to %@",
[self class], aPath, anObject, [aChange objectForKey:@"old"], [aChange objectForKey:@"new"] );
}
被监视的类不用特意修改。
发送消息时,需要用NSObject里面某Category已经定义好的add/removeObserver增删observer即可
Coder* me = [Coder personWithName:@"Si Wei" andAge:25];
[me setLanguage:@"C#"];
Computer* computer = [[Computer alloc] init];
[computer addObserver:me forKeyPath:@"workload" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionNew context:nil];
[computer setWorkload:10];
[computer setWorkload:50];
[computer removeObserver:me forKeyPath:@"workload"];
[computer release]; Read more >>>
10 2月 2012 in 程序
Comments [4]