理想情况下,对象一旦初始化就会开始观察有趣的事件。因此它将在其初始化代码中向 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 充当所有事件发送给的代理,并决定将其转发给谁。这类似于观察者模式,但对象不直接观察或相互通知,而是通过中央代理 - 在这种情况下为 NSNotificationCenter。有了它,您不需要直接连接两个可能使用#include
.
在设计你的类时,不要担心一个对象将如何得到通知或它如何通知其他感兴趣的对象,只需要一个对象在某些事件发生时得到通知,或者它需要在发生事件时通知 NSNotficationCenter它们发生。
所以简而言之,找出对象应该知道的所有事件并在此init()
方法中注册这些事件,并在dealloc()
方法中取消注册它们。
您可能会发现此基本教程很有帮助。