標籤:style blog io ar color os sp java for
//屬性@property(nonatomic) BOOL isFinished;
//註冊監聽 [self addObserver:self forKeyPath:@"isFinished" options:0 context:NULL];
//響應變更事件- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([keyPath isEqualToString:@"isFinished"]) { NSLog(@"changeeddd"); } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; }}
//變更屬性數值[button addTarget:self action:@selector(changeFinished:) forControlEvents:UIControlEventTouchUpInside];-(void)changeFinished:(id)sender {//自動通知 [self setValue:[NSNumber numberWithBool:YES] forKey:@"isFinished"];}
註冊監聽器參數 options
NSKeyValueObservingOptionNew 表示屬性未改變?之前的值;
NSKeyValueObservingOptionOld 表示屬性改變後的值;?
移除觀察者:
[subject removeObserver:observer forKeyPath:@"name"];
KVO相當於JAVA:
account.setListener(new MyListener(){
inspector.method();
});
但是不需要和JAVA一樣聲明一個MyListener介面,也不需要在account類中建立一個setListeber(MyListener listener);的方法,所以更靈活,但是變更屬性時不能簡單賦值!
[IOS學習筆記]KVO