2013-07-03 27 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();