谁能给出一个完整的例子来说明 dispose 和 destruct 在 qooxdoo 1.6 中是如何工作的?,我在 qooxdoo 演示或文档中找不到任何好的示例。
感谢您的建议。
谁能给出一个完整的例子来说明 dispose 和 destruct 在 qooxdoo 1.6 中是如何工作的?,我在 qooxdoo 演示或文档中找不到任何好的示例。
感谢您的建议。
处置和销毁实际上是同一枚硬币的两个方面:处置是销毁对象的行为。通过将 __destruct() 视为 onDispose() 方法,您可能会更清楚它们的区别。
根据经验,任何创建 QX 对象的类都应负责正确销毁它们。通常这是由类的析构函数完成的,但根据您的业务逻辑可能随时发生。
处置是通过(例如)
this._disposeObjects("_buttonOk", "_buttonCancel");
this._disposeArray("_children");
this._disposeMap("_registry");
来电。一些类可能会为它们的销毁提供exploit方法,如qx.ui.core.Widget
如果您使用对象,则不需要实现 dispose。只需要 destruct,而不是所有内容(请参阅上文以了解您应该删除哪个,不需要删除哪个)
它看起来像这样:
qx.Class.define("q.view.Home"),{
extend : qx.ui.core.Widget,
construct:function(){
this.base(arguments);
},
members:{
__qooxdoo_object:null
},
destruct:function(){
this._disposeObjects("__qooxdoo_object");
}
});
就这么简单。关于内存管理链接:这非常重要:“qx.disposerDebugLevel”:“2”
它会自动报告(例如在萤火虫上)没有正确销毁的对象。
因此,您将能够确切地知道应该删除什么,以适当的方式删除什么。
另外,想象一下,你有一个包含 5 个孩子的容器(例如,复合容器或任何东西),你想清空内容而不是容器,你应该这样做:
(根据容器是所有子元素的父元素)
var childrenList = container.removeAll();
for(var i=0; i<childrenList.length; ++i){
childrenList[i].dispose();
}
如果您仅出于某种原因处置对象,我不知道 Widget 类(在 qooxdoo 框架中)有时会引发错误。如果您只删除所有,它不会处理孩子,而只会删除它们。如果您同时执行(dispose 和 removeAll),您将没有问题,并且孩子会得到妥善处理。
也许 qooxdoo 手册中有关内存管理的文档可能会有所帮助: http: //manual.qooxdoo.org/devel/pages/development/memory_management.html