iOS KVO(Key-Value Observing) 요약

2019 단어 iosKVO
KVO는 관찰자가 관찰 대상의 특정 속성의 값을 관찰할 수 있도록 하며, 관찰 대상의 특정 값이 변경되면 observeValueForKeyPath: (NSString*) keyPath ofObject: (id) object change: (NSDictionary *) change context: (void *) context 방법을 터치합니다.
KVO는 NSNotificationCenter와 비슷한 점이 많습니다.우선, KVO는 피관찰자에게 관찰자를 추가해야 한다.addObserver:forKeyPath:options:context:.관찰을 취소하고removeObserver:forKeyPath:context:.
KVO는 NSNotificationCenter와 달리 어떤 방법을 수동으로 호출하지 않아도 된다. 관찰자가 도착하지 않으면 방송은 전송되고 KVO는 실행되지 않는다.KVO는 알림 메서드는 관찰자 객체가 있는 경우에만 수행됩니다.따라서 KVO는 성능에 대한 요구 사항이 높은 일부 지점에서 선택할 수 있습니다.
관찰자 등록
- (void)registerAsObserver
{
  [object addObserver:inspector
          forKeyPath:@"someProperty"
            options:NSKeyValueObservingOptionNew
            comtext:NULL];
}
알림 수신
- (void)observeValueForKeyPath:(NSString *)keyPath
                       ofObject:(id)object
                          change:(NSDictionary *)change
                          context:(void *)context
{
        if(someCondition)
        {
           //do something
        }

        /*
          Be sure to call the superclass's implementation
          * if it implements it *
          NSObject does not implement the method.
         */
        [super observeValueForKeyPath:keyPath
                             ofObject:object
                              change:change
                               context:context];
}
관찰자 취소
- (void)unregisterForChangeNotification
{
   [observedObject removeObserver:inspector forKeyPath:@"someProperty"];
}

한 대상에 관찰자가 있는지 확인하는 방법에 대해
인터넷에서 찾아보니 관찰자가 nil로 돌아오지 않으면 [object observation Info] 방법이 있습니다.
대상에 대한 관찰자 삭제
@try
{
  [object removeObserver:inspector forKeyPath:@"someProperty"];
}
@catch (NSException *e)
{
}
관찰자가 없는 대상에 대한 삭제를 방지하기 위해 프로그램crash.

좋은 웹페이지 즐겨찾기