이상적으로 객체는 초기화되는 즉시 재미있는 이벤트를 관찰하기 시작할 것입니다. 따라서 모든 흥미로운 이벤트를 초기화 코드의 NotificationCenter에 등록합니다. sendEvent:
은 기본적으로 postNotification:
메소드의 래퍼입니다. 클래스 B의 동일
@implementation A
- (id)init {
if(self = [super init]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"SomeEvent" object:nil];
}
return self;
}
- (void)sendEvent {
[[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil];
}
// Called whenever an event named "SomeEvent" is fired, from any object.
- (void)receiveEvent:(NSNotification *)notification {
// handle event
}
@end
편집 1 :
당신은 지나치게 복잡한 문제가 될 수 있습니다. NSNotificationCenter는 모든 이벤트가 전송되는 브로커 역할을하며 누가 전달할지 결정합니다. Observer pattern과 비슷하지만 객체가 서로를 직접 관찰하거나 통보하지는 않지만 중앙 브로커 (이 경우 NSNotificationCenter)를 통해 알 수 있습니다. 이를 통해 #include
을 사용하여 서로 상호 작용할 수있는 두 클래스를 직접 연결할 필요가 없습니다.
클래스를 디자인 할 때 개체가 알림을받는 방식 또는 다른 관심있는 개체에 알림을 보내는 방식에 대해 걱정할 필요가 없습니다. 개체가 발생할 때 일부 이벤트에 대해 알림을 받아야하거나 NSNotficationCenter에 알릴 필요가 있습니다. 이벤트가 발생할 때
간단히 말해이 객체는이 init()
메서드에서 알아야 할 모든 이벤트를 찾아서 dealloc()
메서드에서 등록을 취소합니다.
basic tutorial이 도움이 될 수 있습니다.
또한 classA.h에 @classB를 지정 했으므로 이제 classB.h의 @classA와 같이 두 클래스에서 모두 할 수 있습니다. – Cathy
클래스 A와 클래스 B 사이에서 메시지를 전달하려고합니까? – Anurag
사실 내 요청은 한 NSNotificationCenter 하나의 클래스를 만드는 것입니다 그리고 그것의 개체를 사용하여 sendEvent() 메서드 및 SubscribeEvent() 메서드를 만들 수 있어야합니다. 이제 ClassA는 다른 클래스에 이벤트 및 sendEvents를 수신 할 수 있어야합니다. 어떻게해야합니까 ?? – Cathy