0

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

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

4

1 回答 1

0

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

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

  while(imageControllerArray.length){

     var myArrayItem = imageControllerArray.pop();

       if(myArrayItem.otherObj){

       delete myArrayItem.otherObj;

      //you're now good to go
};
  };
于 2013-08-11T20:20:29.977 回答