Genel olarak, evet, zayıf referanslar kullanılmalıdır. Ama önce “olay dinleyicileri” ile ne demek istediğiniz konusunda net olmalıyız.
Callbacks
Bazı programlama stillerinde, özellikle de eşzamansız işlemler bağlamında, hesaplamanın bir kısmını belirli bir olayda yürütülen geri arama olarak göstermek yaygındır. Örneğin, Promise
[ 1 ] then
, önceki adımın tamamlanmasının ardından bir geri arama kaydeden bir yönteme sahip olabilir :
promise =
Promise.new(async_task) # - kick off a task
.then(value => operation_on(value)) # - queue other operations
.then(value => other_operation(value)) # that get executed on completion
... # do other stuff in the meanwhile
# later:
result = promise.value # block for the result
Burada, then
söz verilen (olay kaynağı) geri aramaya bir referansı tutan tek nesne olduğundan, tarafından kaydedilen geri aramaların güçlü referanslarla tutulması gerekir. Bu, vaadin kendisinin sınırlı bir ömre sahip olması ve vaat zinciri tamamlandıktan sonra toplanacak çöp olması nedeniyle bir sorun değildir.
Gözlemci Düzeni
Gözlemci modelinde, bir öznenin bağımlı gözlemcilerin bir listesi vardır. Konu bir duruma girdiğinde, gözlemciler bazı arayüzlere göre bilgilendirilir. Gözlemciler konuya eklenebilir ve konudan çıkarılabilir. Bu gözlemciler anlamsal bir boşlukta mevcut değiller, ancak bir amaçla olayları bekliyorlar.
Bu amaç artık mevcut değilse, gözlemciler özneden çıkarılmalıdır. Çöp toplanan dillerde bile, bu kaldırma işleminin manuel olarak yapılması gerekebilir. Bir gözlemciyi kaldıramazsak, özneden gözlemciye yapılan referans ve onunla birlikte gözlemcinin başvurduğu tüm nesneler canlı tutulacaktır. (Şimdi işe yaramaz) gözlemci hala bilgilendirileceğinden bu, belleği boşa harcar ve performansı düşürür.
Zayıf referanslar, gözlemcinin çöp toplanmasına izin verdiği için bu bellek sızıntısını düzeltir. Konu tüm gözlemcileri bilgilendirmek için etrafa gittiğinde ve bir gözlemciye zayıf referanslardan birinin boş olduğunu tespit ettiğinde, bu referans güvenle kaldırılabilir. Alternatif olarak zayıf referanslar, öznenin toplama üzerine gözlemciyi kaldıracak bir temizleme geri çağrısı kaydetmesine olanak verecek şekilde uygulanabilir.
Ancak zayıf referansların yalnızca bir gözlemciyi kaldırmayı unutarak hasarı sınırlayan bir bant yardımı olduğunu unutmayın. Doğru çözüm, artık gerekli olmadığında bir gözlemcinin kaldırılmasını sağlamak olacaktır. Seçenekler şunları içerir:
Elle yapmak, ancak bu hatalara yatkındır.
Java veya using
C # kaynak ile denemek için benzer bir şey kullanma .
RAII deyimi gibi deterministik yıkım. Deterministik çöp toplama olan bir dilde, bunun yıkıcıyı tetiklemek için özneden gözlemciye zayıf referanslar gerektirebileceğini unutmayın.