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에 대한 설명을 참고하세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.