[cocoa] 키-밸류 옵져빙 간단 예제

키-밸류 옵저빙은 (예전에 한 번 글을 쓴 적이 있는데… 자꾸 까먹음) 어떤 객체의 변경이 가해질 때 이를 다른 객체가 감지하도록 하는 매커니즘이다.

  1. 특정 객체가 KVO를 따른다면, 해당 객체에 옵저버를 붙일 수 있다. 이 때 옵저버는 변경 통지를 받을 객체가 된다.
  2. 옵저버를 붙일 때는 옵저버, 변경을 감지하고자하는 키패스, 옵션 등이 필요하다.
  3. 옵저버 쪽에서는 observeValueForKeyPath:ofObject:change:context: 메소드를 작성하면 된다.

만약 자신의 어떤 프로퍼티 값이 변경되는 것을 알아채고자 한다면

[self addObserver:self
       forKeyPath:@"self.aNumber.intValue"
          options:NSKeyValueObservingOptionNew |
                  NSKeyValueObservingOptionOld
          context:null];

이라고 하고, 이를 감지하는 메소드는 아래와 같은 식

-(void)observeValueForKeyPath:(NSString *)keypath 
                     ofObject:(NSObject *)object 
                       change:(NSDictionary *)change 
                      context:(void *)context
{
    if ([keypath isEqualToString:@"self.number.intValue"]) {
        NSLog(@"변경감지됨");
    }
}

예제 파일은 다음 링크 참고

https://www.box.com/s/0lcmd3rxl9klfgipltbi