操作系统:Windows 7 X64 旗舰版
Cocos Creator版本: 1.6.2 beta2
测试环境:模拟器
项目中用到了once来监听一些事件,但是在使用途中发现两个问题
1.使用once监听的事件会被重复监听,也就是说,事件类型、事件回调、target都一致的情况下,事件会被重复监听,比如我调用以下代码:
for (var i = 0; i < 10; i++) {
this.node.once('aaa', this.test);
}
那么“aaa”这个事件会被监听10次,触发的时候也会触发10次回调函数,所以想问问是设计如此吗?还是bug?如果是设计如此,那么原因是什么呢?
2.使用once监听事件会导致内存泄漏,我调用以下代码:
for (var i = 0; i < 100000; i++) {
this.node.once('aaa', this.test);
}
创建了100000个监听器,监听的时候可以看到内存明显增长,虽然说重复创建了那么多监听器,但是按理说如果事件被触发后,监听器会被关闭,内存应该就会被释放啊,但是事实是,监听器被触发后,内存不会下降。
如果用on监听则不会出现重复监听和内存泄漏的现象,但是我看了源码,once也是调用的on来监听,只不过多了一层回调用于关闭事件监听:

