NSNotificationCenter
을 통해 알림을 게시하는 클래스 Poster
이 있습니다. 두 명의 다른 관찰자가 있습니다 : ObserverSuperclass
및 ObserverSubclass
. ObserverSuperclass
은 ObserverSubclass
의 수퍼 클래스입니다. 각 클래스가 알림에 다르게 응답하기를 바랍니다.블록 기반 NSNotificationCenter에서 하위 클래스를 관찰 하시겠습니까?
NSHipster에 따르면 최신 블록 기반 API 인 addObserverForName:object:queue:usingBlock:
을 사용해야합니다.
ObserverSubclass
의 초기화 방법에서 관찰자로 수퍼 클래스를 제거해야합니다. 블록 기반 API를 사용하기 때문에 반환 값인 addObserverForName:object:queue:usingBlock:
- "관찰자 역할을하는 불투명 한 객체"를 참조해야합니다. ObserverSubclass.m
[[NSNotificationCenter defaultCenter] removeObserver:self.observer name:@"Help!" object:nil];
ObserverSuperclass.m
self.observer = [NSNotificationCenter defaultCenter] addObserverForName:@"Help!" object:nil queue:nil usingBlock:^{old block}];
에서
@property (nonatomic, strong) id observer;
ObserverSuperclass.h
에서 : 그래서 나는 다음과 같은 코드를 작성
self.observer = [NSNotificationCenter defaultCenter] addObserverForName:@"Help!" object:nil queue:nil usingBlock:^{new block}];
실제로 이것을 수행하는 가장 좋은 방법입니까? 여기에 블록 기반 API를 사용하는 것이 합리적이지는 않습니다.
처리기 블록을 반환하는 메서드를 구현할 수 있습니다. 그런 다음 하위 클래스에서이 메서드를 간단하게 재정의하거나 선택기 기반 API를 사용하면됩니다. – Paulw11
왜 수퍼 클래스를 관찰자로 제거해야합니까? 그 블록을 전혀 실행하지 않겠습니까? – Roberto