Objective-C 中的事件监听器和派发器解决方案,类似于在 ActionScript 3 中使用的。
//set up the dispatcher in your model, or other class:
model.dispatcher = [[EventDispatcher alloc] init];
self.listener = [[EventListener alloc] init];
__weak typeof(self) weakSelf = self;
[self.listener addEventListener:model.dispatcher forEvent:@"customEvent" functionBlock:^{[weakSelf _onCustomEvent];}];
[self.listener addEventListener:model.dispatcher forEvent:@"myEventComplete" functionBlock:^{[weakSelf _onMyComplete];}]
//Your model will dispatch some events:
[model.dispatcher dispatchEvent:@"customEvent"];
[model.dispatcher dispatchEvent:@"myEventComplete"];
- (void) _onCustomEvent {
NSLog(@"_onCustomEvent");
[self.listener removeEventListener:model.dispatcher forEvent:@"customEvent"];
}
- (void) _onMyComplete {
NSLog(@"_onMyComplete");
[self.listener removeEventListener:model.dispatcher forEvent:@"myEventComplete"];
}
移除事件监听器是可选的,因为当监听器对象被释放时,它将清除引用。
如果监听器或派发器没有被分配或初始化,事件将无法正确触发,什么也不会被调用。