1

作为一些从 actionscript 到 IOS 的移植代码,我们有很多自定义组件遵循 Flash/Actionscript 中的事件调度机制:

例如调度员:

dispatchEvent(new CustomEvent(CustomEvent.DRAG_DROP));

消费者:

dispatcher.addEventListener(CustomEvent.DRAG_DROP, actionHandler);

private function actionHandler(event:CustomEvent):void {
            trace("actionHandler: " + event);
        }

我知道 NSNotificationCenter、KVO 模式、动作目标,但似乎没有一个完全匹配?

我将在哪里定义 CustomEvent?CustomEvent.DRAG_DROP?消费者将如何收听该事件?消费者如何知道调度程序可以调度的所有事件?我不想使用委托,因为可能有多个消费者。

4

2 回答 2

0

通常这是通过代表列表完成的。如果您想要多个消费者,请定义一个协议(就像您对委托一样),然后创建这些对象的数组。当您想与所有侦听器进行通信时,请遍历向每个侦听器发送事件的侦听器列表。

于 2013-06-10T21:26:51.510 回答
0

我知道的关闭方式是选择器...

// store event handler
SEL targetHandler;

// firing an event
[targetHandler performSelector:targetHandler withObject:eventObj];

// event handler in the listening class
- (void) onStuffHappened: (Event*) event
{

}

这显然是一个快速的想法,我会扩展 NSObject 并将处理程序存储在 NSMutableArray 中,然后在所有存储的处理程序上运行 performSelector ......类似这样

或者您可以使用代表更清洁的方式。

于 2013-06-10T21:37:35.573 回答