2013-07-03 28 views
4

我有一個控制器,它包含一個保存對象的數組。 每當我想重新加載這個數組,我使用controller.set('messages', []);如何從EmberJS的內存中正確卸載對象?

在我的瀏覽器中,這工作正常,不會導致瀏覽器崩潰。 但是,在iPad上,應用程序在幾分鐘後崩潰。在我的調試日誌中,我看到了一條內存警告。我的猜測是這些對象留在內存中,這會導致應用程序崩潰。 (我在某處看到,Safari上的iPad有大約10MB內存限制,用於JavaScript對象等)

這是從數組中清除數據並刪除對該對象的所有引用的正確方法,因此可以進行垃圾回收由系統?

+0

當開發者工具,推出了谷歌瀏覽器的盒子是很好的跟蹤內存泄漏 – Esailija

回答

2

我想你會遇到一些綁定而不是被刪除,因此你的內存問題。您可以嘗試Array內置方法之一,如clear,這可能會做正確的工作。

例如:

controller.get('messages').clear(); 

這樣的陣列將被重新使用。

請讓我知道它是否有幫助。

+0

謝謝你不應該猜測,這似乎做的伎倆! – KevinJannis

1

您可以調用Ember對象上的destroy方法。

例如:

var messages = controller.get('messages'); 
messages.forEach(function(message) { 
    message.destroy(); 
}); 
messages.clear();