2011-09-16 122 views
5

對於使用dojo等工具包在瀏覽器中長時間運行的應用程序,我一次又一次地聽到一點一點的問題,那就是必須避免懸掛引用。但是在涉及內存管理時,每種語言/框架都有其特有的特性。避免dojo內存泄漏?

在dojo中構建應用程序時,如何避免懸掛引用?我在考慮iOS中「alloc」的規則:如何使用以及如何在完成後自行清理。

回答

2

我認爲dojo最重要的事情就是你應該記得斷開你連接的任何事件。

在自定義的dijit有一個簡單的模式這一點,例如:

//connecting some events 
this._events = [ 
    dojo.connect(...), 
    dojo.connect(...) 
]; 

現在,這是非常簡單的斷開:

dojo.forEach(this._events, dojo.disconnect, dojo); 

在dijit中使用this.connect時同樣的模式適用。

+1

請注意,dijit小部件在銷燬時會自動清除與「widget.connect」相關的任何內容 - 並且通常所有小部件在頁面卸載時都會被銷燬(至少在IE中,歷史上它顯示的內容很重要)。 –

1

還應該注意的是,即使您遵循斷開this answer中提到的斷開事件處理程序的良好做法,也可能會遇到麻煩。可能存在垃圾收集器無法檢測到的循環引用,或Dojo本身無法正確釋放的引用。有時你需要明確地調用它們的「刪除」。以this爲例。

+0

我認爲這是任何工具集的情況。但大多數人都有一些指導方針可以幫助解決很多可預防的情況。 –