请问任何人请详细说明在qooxdoo 1.6中如何处理和破坏? ,我在qooxdoo演示或文档中找不到任何好的例子。
谢谢你的建议。
答案 0 :(得分:3)
处置和破坏实际上是同一枚硬币的两面:处置是破坏物体的行为。通过将__destruct()视为onDispose()方法,它们之间的区别可能会变得更加清晰。
根据经验,任何创建QX对象的类都要对其进行适当的破坏。通常,这是在类的析构函数中完成的,但可能会在任何时候发生,具体取决于您的业务逻辑。
通过(例如)
完成处置this._disposeObjects("_buttonOk", "_buttonCancel");
this._disposeArray("_children");
this._disposeMap("_registry");
呼叫。有些类可能会为它们的破坏提供爆炸方法,如qx.ui.core.Widget
答案 1 :(得分:3)
如果使用object,则不需要实现dispose。只需要破坏,而不是一切(请参阅上文以了解您应该删除哪一个,哪一个不需要)
看起来像这样:
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”
它会自动报告(例如在firebug上)没有被正确销毁的对象。
因此,您将能够确切地知道应该删除哪些内容,以及正确删除的内容。
另外,想象一下,你有一个容器(例如Composite或者任何东西)有5个孩子,你想要清空内容而不是容器,你应该这样做:
(根据容器是所有孩子的父元素)
var childrenList = container.removeAll();
for(var i=0; i<childrenList.length; ++i){
childrenList[i].dispose();
}
如果由于某些原因你只处理了objet,我不知道Widget类(在qooxdoo框架中)有时会引发错误。如果你只删除所有,它将不会处置孩子,但只删除它们。 如果你同时进行(处理和删除所有),你将没有问题,孩子们可以妥善处理。
答案 2 :(得分:1)
也许qooxdoo手册中有关内存管理的文档可能会有所帮助: http://manual.qooxdoo.org/devel/pages/development/memory_management.html