1

谁能给出一个完整的例子来说明 dispose 和 destruct 在 qooxdoo 1.6 中是如何工作的?,我在 qooxdoo 演示或文档中找不到任何好的示例。

感谢您的建议。

4

3 回答 3

3

处置和销毁实际上是同一枚硬币的两个方面:处置是销毁对象的行为。通过将 __destruct() 视为 onDispose() 方法,您可能会更清楚它们的区别。

根据经验,任何创建 QX 对象的类都应负责正确销毁它们。通常这是由类的析构函数完成的,但根据您的业务逻辑可能随时发生。

处置是通过(例如)

this._disposeObjects("_buttonOk", "_buttonCancel");
this._disposeArray("_children");
this._disposeMap("_registry");

来电。一些类可能会为它们的销毁提供exploit方法,如qx.ui.core.Widget

于 2012-04-26T08:12:53.487 回答
3

如果您使用对象,则不需要实现 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),您将没有问题,并且孩子会得到妥善处理。

于 2012-05-27T21:18:46.800 回答
1

也许 qooxdoo 手册中有关内存管理的文档可能会有所帮助: http: //manual.qooxdoo.org/devel/pages/development/memory_management.html

于 2012-04-26T06:07:09.437 回答