알림, KVO(관찰자 모드)
통지는 이전의 블로그에서 통지의 기초 사용 방법을 간단하게 언급한 적이 있기 때문에 일부 기본적인 사용 방법은 다시 한 번 군말하지 않는다.본론으로 돌아가면 코코아 터치 프레임워크에서 NSNotification Center와 NSNotification 대상은 일대다 모델을 실현했다.NSNotificationCenter를 통해 서로 알지 못하더라도 객체 간에 통신할 수 있습니다.다음은 NSNotificationCenter의 발표 정보를 살펴보겠습니다.
Notification subjectMessage = [ NSNotification notificationWithName:@"subjectMessage" object: self]; NSNotificationCenternotificationCenter = [ NSNotificationCenter defaultCenter]; [notificationCenter postNotification:subjectMessage];
위 코드를 통해subjectMessage라는 NSNotification 대상을 만들고 notificationCenter를 통해 이 메시지를 발표합니다.NSNotificationCenter 클래스에 defaulCenter 메시지를 보내면 NSNotificationCenter 실례의 인용을 얻을 수 있습니다.각 프로세스에는 기본 알림 센터가 하나뿐이므로 기본 NSNotificationCenter는 단일 예제 객체입니다.다른 관찰자가 대상과 관련된 이벤트를 결정하면 다음과 같은 방법으로 조작할 수 있다. NSNotificationCenter* notificationCenter1 = [NSNotificationCenter default Center].[notificationCenter addObserver: self selector: @selector(update:) name:@"subjectMessage"object: nil ];
상기 절차를 거쳐 우리는 알림 센터에 이벤트를 등록했고 selector를 통해 방법 업데이트를 제정했다. 다음은 다음과 같은 방법을 실현할 수 있다.
- (void) update: (NSNotification*) notification {if([notification name] isEqual Tostring: @ "subject Message"]) {NSLog (@ "%@", @ "원숭이가 보낸 구원병 어디 갔어?")물론 마지막으로 감청을 소각해야 한다면-(void) dealloc {[[[NSNotificationCenter default Center]removeObserver:self]}2. 통지를 이해한 후에 KVO KVO는 코코아가 제공하는 키 관찰이라는 메커니즘으로 대상은 이를 통해 다른 대상의 특정한 속성에 대한 변경 통지를 받을 수 있다.이 메커니즘은 NSKeyValueObserving을 바탕으로 비공식적인 것이다. 코코아는 이 프로토콜을 통해 모든 프로토콜을 따르는 대상에게 자동화된 속성 감청 기능을 제공했다.알림과 KVO는 모두 관찰자에게 실현할 수 있지만 그들 사이에는 약간 다르다. 위의 예에서 알 수 있듯이 알림은 하나의 중심 대상이 모든 관찰자에게 변경 알림을 제공하는 것으로 주로 넓은 의미에서 프로그램 이벤트를 주목하고 KVO는 관찰된 대상이 직접 관찰자에게 알림을 보내고 특정한 대상의 속성에 귀속된 값이다.다음은 저희가 간단한 예를 통해서 그분의 사용법을 알아보겠습니다. 일단 Hero라는 모형이 있어요.
@property (nonatomic,copy) NSString name; @property (nonatomic,copy) NSString title; @property (nonatomic,assign) NSUInteger age;
제어에서 초기화하고 값을 부여합니다.hero = [[Hero alloc] init]; self.hero.name = @ "조운";self.hero.title = @ 장군;self.hero.age = 87;
현재 우리의 이 대상은 기본적으로 값이 있다. 그러면 우리는 이 대상의name를 그의 변화를 감청할 것이다
[self.hero addObserver:self forKeyPath:@"name"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
알림 트리거 및 값 변경
- (void) touches Began: (NSSet) touches with Event: (UIEvent) 이벤트 {self.hero.name = @ "장비";제정된 리셋 함수에서 받은 변경 알림을 처리합니다
- (void) observeValueForKeyPath: (NSString) keyPath ofObject: (id) objecservereValueValue: (NSString) objececject: (id) objececececechange change: (NNSDictionary) change: (NSDictionary) change: (NNSDijececechange changee: (Nid) changevaluevalue: (Nisthary ary ary a a a a a a a a a a a a a a a jectject: (id): (id): (id) objecjecharvejecharvej).리셋 인쇄는 다음과 같다. 값을 부여한 후: - 장비의 새로운 값: - 장비의 이전 값: - 조운은 마지막으로 관찰자를 취소한다.
-(void)dealloc{ [self.hero removeObserver:self forKeyPath:@"name"]; }
여기서 관찰자 모드에서 자주 사용하는 KVO와 알림의 내용은 여기에 있다. 그러나 여기서 언급한 것은 가장 기초적인 용법일 뿐이라는 것을 알아야 한다. 이후에 우리는 더욱 깊이 있게 탐구하거나 후속적으로 iOS의 에이전트와 블락을 비교하여 iOS의 메시지 전달 메커니즘을 탐색할 수도 있다. 또는 Swift의did Set,will Set의 속성 감청 방법처럼
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.