假设我有一个事件监听器函数正在侦听一个事件,该事件将在程序的整个生命周期内再次调用 。监听对象永远不需要被垃圾收集。
这使用了多少内存?
如果它可以忽略不计,我宁愿不删除监听器,因为使用removeEventListener()
语句会使我的代码的可读性降低。
答案 0 :(得分:0)
它可以忽略不计,除非你有成千上万的。查看EventDispatcher的工作原理,并查看其源代码。
答案 1 :(得分:0)
这完全取决于听众的大小和复杂程度。在许多情况下,内存影响可以忽略不计,但是,您在内存中保存的对象可能会在内存中保留其他几个对象。如果其中一个是流媒体视频或其他东西,它可能会吮吸您的内存,处理器和网络。
首次添加事件侦听器时,还可以将useWeakReferences设置为true。这使得侦听器和事件调度程序之间的链接变弱,以便后者在其他地方删除时不会保留先前的内存。 More on that here.
但是,将内容中的对象留在不会再次使用并且没有理由避免removeEventListener()
的情况下,这绝不是一个好主意。在使其正常工作之前争取代码可读性绝不是一个好主意。如果您关心代码的外观,请将removeEventListener()
调用放在名为cleanupUnusedListeners()
的方法中。实际上,我会说省略它是不太可读的,因为当你在寻找内存泄漏的来源时,找到你没有放置removeEventListener()
的地方会更难。它可能不是很漂亮,但就像它一样,杰克。