KVO, 그냥 속성을 관찰하고 자동으로 통지에게이 변화 할 때마다 얻을 수있는 능력으로, 마법처럼 보이지만 정말 모든 애플이 자동으로이에서 귀하의 재산의 세터를 변경할 수 있습니다 :
- (void)setFoo:(Foo *)newFoo {
self.foo = newFoo;
}
로 이 :
- (void)setFoo:(Foo *)newFoo {
[self willChangeValueForKey:@"foo"];
self.foo = newFoo;
[self didChangeValueForKey:@"foo"];
}
will
및 didChangeValueForKey:
방법은 KVO 시스템이 속성에 대한 관찰자를 확인하고있을 경우이를 통지의 원인이 무엇인가. setter의 자동 대체는 Objective-C의 매우 역동적 인 특성을 이용하여 이루어 지므로 런타임에 메서드를 패치하고 변경하는 것이 상대적으로 간단합니다 (KVO 속성을 구현하는 데 dynamic
키워드가 필요한 이유는 Swift에서). 물론 이러한 동적 기능은 C 또는 C++에는 없습니다.
당신이해야 할 일은 C 코드가 2 개의 콜백을 정의하도록하는 것입니다. 하나는 C 코드가 값을 변경하기 전에 호출하고 다른 하나는 나중에 호출합니다. 이 설정을 완료하면 Objective-C 측에서 설정 프로세스의 어딘가에 이러한 콜백을 등록하고 willChangeValueForKey:
및 didChangeValueForKey:
메소드를 콜백으로 호출하게합니다. 이 작업을 완료하면 일반 KVO 방법을 사용하여 속성을 관찰 할 수 있어야합니다.