2012-04-25 8 views
1

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

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

答えて

3

処分と破壊が現実に表裏一体です:処分は、オブジェクトを破壊する行為です。これらの違いは、__destruct()をonDispose()メソッドとして考えることで、より明確になります。

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

処分は(EX。)

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

コールを介して行われます。いくつかのクラスは、qx.ui.core.Widgetのように、破壊のためのexplocitメソッドを提供することがあります。

+0

これは非常に役に立ちました。それは思考をクリアする。 –

3

オブジェクトを操作する場合は、disposeを実装する必要はありません。自爆必要とされ、そしてないすべてのもののために(あなたがする必要はありませんこれは1、削除すべき1キャッチする上記参照)

それはなります。このようなルックスのみ:このような単純なよう

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(); 
} 

あなたが唯一の私はqooxdooの枠組みの中でWidgetクラスを(知らない何らかの理由でオブジェを配置した場合は)時々エラーを発生させます。 removeAllだけの場合、子は破棄されず、削除されます。 (disposeとremoveAllの両方を行う場合)問題はなく、適切に処分されます。