KVO 소개

2424 단어
KVO의 전체 이름은 Key Value Observing입니다.키값 관찰로 직역하다.KVO는 주로 시각적 상호작용에 사용된다. 예를 들어 어떤 데이터가 변화하면 인터페이스의 표시도 수요에 따라 변화한다. 그러면 이력서 데이터와 인터페이스의 관련성을 가져야 한다.KVO는 관찰 대상의 특정한 속성 변화가 있을 때 관찰 대상에게 알리는 메커니즘을 정의했다.

메서드 정의:


변경된 알림-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 방법 호출 시기: 주어진 대상의 특정한 키Path에 대응하는 값이 변할 때 메시지는 수신자에게 발송됩니다.
매개변수에 대한 설명:
키Path: object와 연결된, 변화하는 값을 가리키는 Object: 키Path의 원본 대상change: object와 연결된 키Path가 대응하는 속성 변화에 대한 설명을 하는 디렉터리 대상입니다.context: 수신자가 등록된 후 키-value 관찰 알림을 받은 후 제공된 값을 받을 수 있습니다.
********참고: 수신자가 메시지를 수신할 수 있는 전제는 특정 객체의 특정 *****keyPath****에 관찰자로 등록되어야 합니다. **********************관찰자로 등록*********key-path와 관련된 수신자가 보낸 KVO 알림을 받을 관찰자를 등록합니다.방법:
-(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context

매개 변수
anObserver: KVO 알림을 등록하는 대상입니다. 관찰자는 키-value 관찰 방법을 실현해야 합니다. observerValueForKeyPath: ofObject:change:context:keyPath: 수신자가 관찰 속성과 관련된 키 path,nil options: 관찰 알림에 포함된 NSKey Value Observing Options의 값을 조합한context: 임의의 값을 방법에 전달할 수 없습니다. observe Value ForKey Path: of Object:change:context: 수신자든 관찰자든 모두retained입니다.KVO를 사용할 때 상기 방법의 대상을 호출한 후 removeObserver:forKeyPath: 또는 removeObserver:forKeyPath:context: 방법을 호출해야 한다. 마지막으로 주의해야 할 것은 관찰할 값은 KVC 방법을 통해 설정해야 KVO를 통해 받아들일 수 있고 그렇지 않으면 안 된다는 것이다.즉 xxx setValue: forKey: 이런 방법.
- (id)initWithStudent:(Student *)student {
    if (self = [super init]) {
        _student = student;
        [_student addObserver:self forKeyPath:@"courseName" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:@"new observer"];
    }
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"courseName"]) {
        NSLog(@" ");
        NSLog(@" :%@, %@", [change objectForKey:@"new"], [change objectForKey:@"old"]);
        NSLog(@"context is %@", context);
    }
}

- (void)dealloc {
    [self.student removeObserver:self forKeyPath:@"courseName" context:@"new observer"];
}


예를 들어 용 선생님의 KVO에 대한 설명을 참고하세요.

좋은 웹페이지 즐겨찾기