2013-02-25 68 views
1

当您可以直接调用函数时,创建类似这样的事件有什么用处。调用函数与调度事件

例如

var customEvent:Event = new Event("ev"); 
_myObject.addEventListener("ev", handler); 

private function handler(e:Event):void 
{ 
    //Do something 
} 

//And then dispatching the event else where like this 
_myObject.dispatchEvent(customEvent); 

当你可以简单地直接调用函数这样

handler(); 
private function handler():void 
{ 
//do something 
} 

究竟什么是自定义事件的意义呢?在这种情况下,我应该使用哪一个来提高效率和最少的资源消耗?

+0

通过调度事件,您可以从任何线程分派事件,但始终从单个线程运行处理程序。对于需要从GUI事件线程运行绘图例程的GUI代码很常见。也许处理程序调用的函数不是可重入的。 – 2013-02-25 17:03:08

+1

你应该看看Signals而不是事件。无需事件/信号,管理回调函数引用可能会变得乏味。 – 2013-02-25 17:09:18

回答

6

在调度事件的情况下,'调度员'不需要知道任何关于监听者的信息。甚至可能没有听众存在。

在直接调用函数的情况下,它必须知道函数的名称,它必须引用实现该函数的对象,等等。它使得代码难以重复使用。

0

从效率和诚实的意见可维护性角度来看,您应该更喜欢直接的方法调用。

事件更通用,通常用于Publish-subscribe模式。您可以用任何语言很容易地创建基于事件的系统,并且可以为每个可以派发的事件维护一个订阅者列表。必须检查并遍历这个列表,调用所有订户,这通常可以通过字典或其他数据结构高效地完成。

如果你坚持一致的消息模式,那么事件可以从GUI表示抽象逻辑有帮助。许多语言使用事件来整合GUI系统,包括C#,AS3,Objective-C。

在一般情况下,消息系统可能变得越来越难以维护,因为项目大小会随着编译时间的减少而增加,从而支持更通用的动态调度机制。