В идеале объект должен начать наблюдать интересные события, как только его инициализируют.Таким образом, он регистрирует все интересные события в NotificationCenter внутри своего кода инициализации.sendEvent:
- это в основном оболочка для метода postNotification:
.
@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
То же самое для класса B.
Редактировать 1:
Возможно, вы слишком усложняетепроблема.NSNotificationCenter выступает в качестве посредника, которому отправляются все события, и решает, кому это переслать.Это похоже на шаблон Observer , но объекты напрямую не наблюдают или не уведомляют друг друга, а скорее через центрального посредника - в данном случае NSNotificationCenter.При этом вам не нужно напрямую соединять два класса, которые могут взаимодействовать друг с другом, с #include
.
При разработке ваших классов не беспокойтесь о том, как объект получит уведомление или как онбудет уведомлять другие заинтересованные объекты, только о том, что объект должен получать уведомления о некоторых событиях, когда они происходят, или он должен информировать NSNotficationCenter о своих событиях, когда они происходят.
Короче, выясните все события,объект должен знать об этих событиях и регистрировать их в этом методе init()
, а также отменить их регистрацию в методе dealloc()
.
Этот базовый учебник может оказаться полезным.