【问题标题】:qooxdoo destruct , disposeqooxdoo 销毁, 处置
【发布时间】:2012-04-25 13:14:23
【问题描述】:

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

感谢您的建议。

【问题讨论】:

    标签: javascript qooxdoo


    【解决方案1】:

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

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

    通过(例如)进行处置

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

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

    【讨论】:

      【解决方案2】:

      如果您使用对象,则无需实现 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”

      它会自动报告(例如在 firebug 上)没有正确销毁的对象。

      这样你就可以确切地知道你应该删除什么,以适当的方式删除什么。

      另外,想象一下,您有一个包含 5 个子项的容器(例如 Composite 或其他任何东西),并且您想要清空内容而不是容器,您应该这样做:

      (根据容器是所有子元素的父元素)

      var childrenList = container.removeAll();
      for(var i=0; i<childrenList.length; ++i){
        childrenList[i].dispose();
      }
      

      如果您只是出于某种原因处置 objet,我不知道 Widget 类(在 qooxdoo 框架中)有时会引发错误。如果您只删除所有,它不会处理孩子,而只会删除它们。 如果你同时做(dispose 和 removeAll),你不会有问题,孩子也会被妥善处理。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 是的,我已经阅读了这篇文章,但是没有任何实现 Dispose 和 Destruct 的类的示例......看看它是如何工作的
        猜你喜欢
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多