KVO & 알림
KVO:
은 특정한
의 속성이 수정되면 KVO가 자동으로 응답하는
(KVC-키 인코딩은 KVO의 기초) :
을 알려주는 방송 메커니즘으로 실천이 발생할 때
을 통해 이 시간에 발생하는 모든 관심 대상에게 메시지를 보낼 수 있다.둘 다 관찰자 모델인데 다른 점은 다음과 같다.
KVO
은 피관찰자가
에게 직접 메시지를 보낸 것으로 대상 간의 직접적인 상호작용이다.
은 둘 다 통지 센터의 대상과 상호작용을 하고 대상 간에 서로를 모른다.KVO 사용:
은 addobserver:forkeyPath:options:context:
방법을 통해 observer
을 첨가한 다음에
의 keypath
값이 변하면
에서 방법 observerValueForKeyPath:ofobject:change:context:
을 호출하여 이 방법을 실현하여 KVO
이 보낸 통지에 응답한다.이 코드들은 모두
에서 실현되었고
은 어떠한 코드도 추가하지 않았기 때문에 누가 등록을 감청하고 응답을 처리하면 된다. 그래서
과
이 완전히 결합되고 운용이 유연하고 간편하다.그러나 KVO
은 클래스의 속성만 검출할 수 있고 속성 이름은 모두 NSString
을 통해 찾을 수 있습니다. 컴파일러는 오류 검출과 보완을 도와주지 않으며 맨손으로 두드리면 오류가 발생하기 쉽습니다!알림 사용:
통지의 발송은
에 의해 통일적으로 발송되고 서로 다른 통지는 유일한 표지명인 notifcationName
을 통해 구분되며 표지명은 통지를 발송하는 유형에서 시작된다.먼저
자신이 어떤 방법(A)에서 방법 postNotificationName:object:
을 통해 통지 notificationName
을 보내면 통지자 쪽의 업무가 완성되고 A가 집행될 때마다 통지 notificationName
을 한 번 보낸다.그리고 감청 A의 변화가 필요하다면
[NSNotificationCenter defaultCenter]
의 방법으로 addobserver:selector:name:object
을
으로 등록감청 통지 명칭이 notificationName
이라는 통지를 한다.매번 통지 명칭이
notificationName
이라는 통지를 보낼 때마다 등록 감청 후의
은 자신이 정의한 방법인 notificationselector
을 호출하여 상응하게 한다.NSNotification
의 특징은
이 먼저 통지를 보내고
이 감청에 등록한 후에 응답을 해야 한다는 것이다. KVO보다 통지를 보내는 단계가 많지만 감청은 속성의 변화에 국한되지 않고 다양한 상태 변화를 감청할 수 있어 감청 범위가 넓고 사용이 유연하다는 장점이 있다.주의: 관찰자를 마지막으로 제거해야 합니다!!
KVO:
1、관찰자 증가
, keyPath !!!!!
[self.textField addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
2. 관찰자가 감청 방법을 실현한다.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"text"]) {
NSLog(@" ,%@", self.textField.text);
}
}
3. 실행 방법을 호출한다.
// -
[self.textField setValue:@"123" forKeyPath:@"text"]; //
self.textField.text = @"asd"; //
4. kvo의 관찰자 제거
- (void)dealloc
{
[self.inputTextField removeObserver:self forKeyPath:@"text"];
}
:
1. 하나의 통지를 등록하고 하나의 방법을 실현하며 방법과 방법 사이에 독립적이다.
// ----
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldValueChange:) name:@"textFieldValueChangeNotication" object:nil];
2、관찰자 구현 @selector 방법
- (void)textFieldValueChange:(NSNotification *)noti
{
NSLog(@"%@", noti.userInfo);
}
3. 피관찰자가 통지를 발송한다.
[[NSNotificationCenter defaultCenter] postNotificationName:@"textFieldValueChangeNotication" object:nil];
4. 관찰자 제거 알림
//
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
//
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"textFieldValueChangeNotication" object:nil];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.