benim Jetpack tabanlı kütüphanede A
(biz krom/uzatma kodu bahsediyoruz yani) bir sınıf yazıyorum varsayalım:Zayıf referans
function A() {
//constructor
}
A.prototype = {
//class members
};
kullanıcı oluşturan bir sınıfın A
örneği:
var a = new A();
şimdi oluşturulan A
tüm örneklerini takip etmek istediğinizi varsayalım, elimden:
var listA = [];
ile biten, A
yapıcısı içinde listA.push(this);
ekleyin:
var listA = [];
function A() {
// constructor
listA.push(this);
}
A.prototype = {
// class members
};
a
kullanım referansını düşene kadar, tüm ince (ör a
kapsam dışıdır). Şimdi bir sorunum var:hala a
referansı içerir, bu yüzden asla çöp toplanmayacaktır. Üstelik, A
arasındaki örneklerin, erişilemeyen filtrelerini filtrelemenin hiçbir yolu yoktur. Ben etkili bir şekilde hafıza sızıntısı yapıyorum.
İhtiyacım olan şey, sıradan olanlar yerine listA
zayıf referanslara zorlamak. Sanırım bir şekilde yapmak mümkün, ama gerçekten buradan nereye gideceğimi bilmiyorum. Ben böyle bir şey tahayyül edebilirsiniz:
var weak_a = new weakRef(a);
assert(weak_a.ref === a);
Ama sonra bilmiyorum, bir zayıf başvuruya hala geçerli olup olmadığını, örneğin nasıl test etmek. Ya da listA
'daki zayıf girişleri verimli bir şekilde filtreleyebilirsiniz. Baska öneri?
çok ... listA bir üyesidir? –
nope. Soruyu düzenledim, umarım artık daha açık. – CAFxX