2012-04-25 4 views
1

Может ли кто-нибудь дать полный пример того, как утилизация и уничтожение работают в qooxdoo 1.6? , Я не могу найти хороший пример в демонстрациях qooxdoo или документации.qooxdoo destruct, dispose

благодарю вас за консультацию.

ответ

1

Может быть документ в qooxdoo руководстве об управлении памятью может быть полезным: http://manual.qooxdoo.org/devel/pages/development/memory_management.html

+1

Да, я прочитал это, но нет примера с классом, который реализует Dispose и Destruct ..., чтобы увидеть, как это работает. –

3

Утилизация и уничтожение в действительности две стороны одной медали: Утилизация является актом разрушающих объектов. Их отличие может стать более понятным для вас, если рассматривать метод __destruct() как метод onDispose().

Как правило, любой класс, создающий объекты QX, несет ответственность за их надлежащее уничтожение. Обычно это делается деструктором класса, но может произойти в любое время в зависимости от вашей бизнес-логики.

Утилизация осуществляется через (напр.)

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

звонки. В некоторых классах могут быть обнаружены методы их уничтожения, как в qx.ui.core.Widget

+0

Это было очень полезно. Он очищает мысли. –

3

Вам не нужно реализовывать утилиту, если вы работаете с объектом. Только деструктор нужен, и не для всех (см выше, чтобы поймать какой из них следует удалить, что один не нужно)

Это будет выглядеть следующим образом:

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) объекте, который не был должным образом уничтожен.

Таким образом, вы сможете точно знать, что вы должны удалить, что удалено надлежащим образом.

Кроме того, представьте себе, вы получили контейнер (Composite, например, или что-нибудь) с 5 детьми, и вы хотите, чтобы очистить содержимое, но не контейнер, вы должны сделать так:

(в соответствии контейнер родительский элемент всех детей)

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

Если вы только распоряжаться Objet по какой-то причине я не знаю класс Widget (в рамках qooxdoo) иногда поднимают ошибку. Если вы удалите файл AllAll, они не будут удалять детей, а только удалять их. Если вы выполняете оба действия (dispose and removeAll), у вас не будет проблем, и дети будут правильно настроены.