从数组中删除对象,然后删除

时间:2013-08-11 20:05:09

标签: javascript arrays model-view-controller

我正在构建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
    }

解决此问题的最佳方法是什么?有什么建议?我认为我需要做的是删除对控制器的任何引用而不是对象本身。我担心我的方法可能是在某个全局空间上创建对象,因此只是删除数组引用实际上不会释放该对象以进行垃圾回收。

1 个答案:

答案 0 :(得分:0)

如果您需要检查从数组中删除的对象,请从数组中捕获弹出的项目,然后您将从数组中删除该项目,现在可以应用您需要执行的任何其他操作,例如检查是否有任何其他对象指向弹出的数组项。

如果有任何内容指向从阵列中删除弹出的项目,您可以打赌它将永远存在,直到指向弹出的数组项目的项目被删除或删除。

  while(imageControllerArray.length){

     var myArrayItem = imageControllerArray.pop();

       if(myArrayItem.otherObj){

       delete myArrayItem.otherObj;

      //you're now good to go
};
  };