Как создать класс для отправки и получения событий через NSNotificationCenter в Objective-C?
Мне нужно создать два класса, и оба должны иметь возможность отправлять и получать события с помощью методов NSNotificationCenter. Оба должны иметь методы sendEvent и receiveEvent:
@implementation Class A
-(void)sendEvent
{
addObserver:--- name:---- object:---
}
-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end
То же, что и другой класс, говорят, что ClassB также должен иметь возможность отправлять и получать события. Как это можно сделать?
1 ответ
В идеале объект начинает наблюдать интересные события, как только его инициализируют. Таким образом, он регистрирует все интересные события в 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()
метод.
Вы можете найти этот основной урок полезным.