谁能给出一个完整的例子,说明在qooxdoo 1.6中dispose和destruct是如何工作的?我在qooxdoo演示或文档中找不到任何好的例子。
谢谢你的建议。
发布于 2012-04-26 16:12:53
处置和销毁实际上是一枚硬币的两面:处置是销毁对象的行为。通过将__destruct()看作onDispose()方法,它们之间的区别可能会变得更加清晰。
根据经验,任何创建QX对象的类都要对它们的正确销毁负责。通常这是由类的析构函数完成的,但根据您的业务逻辑随时可能发生。
处理通过(例如)
this._disposeObjects("_buttonOk", "_buttonCancel");
this._disposeArray("_children");
this._disposeMap("_registry");电话。一些类可能会提供用于销毁它们的explocit方法,如在qx.ui.core.Widget中
发布于 2012-05-28 05:18:47
如果您使用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上)未正确销毁对象。
因此,你将能够确切地知道你应该删除什么,以适当的方式删除什么。
另外,想象一下,你有一个有5个孩子的容器(例如,组合,或任何东西),你想清空内容,但不想清空容器,你应该这样做:
(根据容器是所有子元素的父元素)
var childrenList = container.removeAll();
for(var i=0; i<childrenList.length; ++i){
childrenList[i].dispose();
}如果你只是出于某种原因处理对象,我不知道Widget类(在qooxdoo框架中)有时会引发错误。如果你只使用removeAll,它将不会处置子对象,而只会删除它们。如果同时使用(dispose和removeAll),就不会有问题,孩子也会得到正确的处理。
发布于 2012-04-26 14:07:09
也许qooxdoo手册中关于内存管理的文档会有所帮助:http://manual.qooxdoo.org/devel/pages/development/memory_management.html
https://stackoverflow.com/questions/10316443
复制相似问题