1

qooxdoo 1.6 で dispose と destruct がどのように機能しているかの完全な例を教えてください。、qooxdoo のデモやドキュメントに良い例が見つかりません。

アドバイスありがとうございます。

4

3 に答える 3

3

オブジェクトを操作する場合は、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();
}

何らかの理由でオブジェクトを破棄するだけの場合、(qooxdooフレームワークの)Widgetクラスがわからない場合にエラーが発生することがあります。removeAllのみを実行すると、子は破棄されず、削除されるだけです。両方(disposeとremoveAll)を実行すると、問題は発生せず、子は適切に破棄されます。

于 2012-05-27T21:18:46.800 に答える
3

廃棄と破壊は、実際には同じコインの裏表です。廃棄とは、オブジェクトを破壊する行為です。__destruct() を onDispose() メソッドと考えると、それらの違いがより明確になるかもしれません。

経験則として、QX オブジェクトを作成するクラスは、それらを適切に破棄する責任があります。通常、これはクラスのデストラクタで行われますが、ビジネス ロジックによってはいつでも発生する可能性があります。

廃棄は(例)を介して行われます

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

呼び出します。一部のクラスは、qx.ui.core.Widget のように、それらを破棄するための明示的なメソッドを提供する場合があります。

于 2012-04-26T08:12:53.487 に答える
1

メモリ管理に関する qooxdoo マニュアルのドキュメントが役立つかもしれません: http://manual.qooxdoo.org/devel/pages/development/memory_management.html

于 2012-04-26T06:07:09.437 に答える