最近工作需要用了一段时间egret,发现egret的示例中频繁的使用removeListener,小白想问:
1.这么做是不是为了防止内存溢出?或者是有别的目的?
2.另外,在cocos creator中切换场景前(使用loadScene)需要移除当前场景中手动添加的监听吗?我在自己的游戏中创建了一个滚动列表,列表中的项是动态生成的,每个项我都给他添加了click事件(当成按钮用)。
3.如果需要移除监听,调用eventManager.removeAllListeners就可以了吗?还是需要手动去一个一个移除?
在 Node 上监听的任何事件,都会在 Node 的 active 状态变为 false 时被取消注册,所以切换场景时,旧场景中 Node 上的事件监听器就失效了。
如果你在其他的公共对象上添加事件监听器,需要自己负责取消注册。不建议使用 eventManager 的 API,它是旧风格集约式的事件管理,在 creator 中,我们提倡的是离散式的事件管理
@panda 我在场景中也频繁的调用node.active来显示隐藏一些东西,好像没发现事件监听失效的问题,是因为它们都是在ide(dashboard)中设置的事件监听而不是在js代码中设置的吗?我的第一个场景只有上面说的那个列表项是用node.on(“click”,functionName)的方式添加监听的。
按照大大你的意思,就是切换场景时可以不用手动移除监听,对吧?我没有公共对象。
为了防止内存泄露
不用,不过手动移除也不会错
谢谢!