我正在构建MVC设计模式中的系统。我需要创建一系列控制器。后来我可能希望能够在不再需要时从内存中删除这些控制器。控制器是使用new关键字创建的,所以我遇到了如何存储对象引用的问题。我决定使用一个数组。当我创建它们时,它们被添加到一个数组中,当我销毁时,我遍历数组并删除。我想确保我没有泄漏记忆。假设我没有创建对控制器对象的其他引用,这将有效地使它们成为垃圾收集的候选者:
//creating the objects and storing them
//create image controller & modelfor each image (model injected as a dependency)
for (var i = 0; i < imageData.galleryImages.length; i++) {
imageControllerArray.push( new ImageController(someParam, new model()));
};
//here I want to destroy the controllers
while(imageControllerArray.length){
imageControllerArray.pop(); //would this do it?
//delete imageControllerArray.pop(); //What about this?
// imageControllerArray.pop().destroy() //where each controller deletes itself
}
解决此问题的最佳方法是什么?有什么建议?我认为我需要做的是删除对控制器的任何引用而不是对象本身。我担心我的方法可能是在某个全局空间上创建对象,因此只是删除数组引用实际上不会释放该对象以进行垃圾回收。
答案 0 :(得分:0)
如果您需要检查从数组中删除的对象,请从数组中捕获弹出的项目,然后您将从数组中删除该项目,现在可以应用您需要执行的任何其他操作,例如检查是否有任何其他对象指向弹出的数组项。
如果有任何内容指向从阵列中删除弹出的项目,您可以打赌它将永远存在,直到指向弹出的数组项目的项目被删除或删除。
while(imageControllerArray.length){
var myArrayItem = imageControllerArray.pop();
if(myArrayItem.otherObj){
delete myArrayItem.otherObj;
//you're now good to go
};
};