情形
最常见的情况,就是不断创建右键菜单,如下:
上面的代码,每次右键点击,都创建了一个 menu 实例,用完未销毁。以后再也无法引用到这些实例,这样就引发内存泄漏。这种错误的做法一般新人都会经历的。
组件 不同于 一般的 object,一般的 object 可能可以被垃圾回收,但是组件实例因为有 dom 存在,需要销毁。
一般,父容器的销毁,会自动销毁其下的子组件。然而上述代码中创建的 menu,并没有父组件,也就是 menu.parent 不存在,menu 是游离在视图之外的,因此无法被自动销毁,需要手动 destroy。
改进方法:
1、用完就销毁
如果是 Dialog,可以设置 closeAction: ‘destroy’,并且 “取消”按钮的逻辑是 dialog.close() ,可以关闭时销毁。
2、复用已创建的实例
已创建的实例需要用一个 view 或 controller 的成员变量引用着,以便下一次使用。注意在 view 或 controller 销毁时,一同销毁。