从数组中删除对象,然后删除
Remove an object from an array and then delete
我正在用MVC设计模式构建一个系统。我需要创建一系列控制器。稍后,当不再需要这些控制器时,我可能希望能够将它们从内存中删除。控制器是使用新关键字创建的,所以我遇到了如何存储对对象的引用的问题。我决定使用数组。当我创建时,它们被添加到数组中,当我销毁时,我会循环遍历数组并移除。我想确保我没有泄露记忆。假设我没有创建对控制器对象的其他引用,这将有效地使它们成为垃圾收集的候选者:
//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
}
解决这个问题的最佳方法是什么?有什么建议吗?我的想法是,我需要做的是删除对控制器的任何引用,而不是对象本身。我担心我的方法可能是在某个全局空间上创建对象,因此仅仅删除数组引用实际上不会释放对象进行垃圾收集。
如果您需要检查从数组中删除的对象,请从数组中捕获弹出的项,您将从数组中移除该项,现在可以应用您需要对其执行的任何其他操作,例如检查是否有其他对象指向弹出的数组项。
如果有任何东西指向从数组中删除的弹出项目,你可以打赌它将永远存在,直到指向弹出数组项目的项目被删除或删除。
while(imageControllerArray.length){
var myArrayItem = imageControllerArray.pop();
if(myArrayItem.otherObj){
delete myArrayItem.otherObj;
//you're now good to go
};
};
相关文章:
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 删除重复的数组值,然后存储它们[反应]
- 正则表达式匹配然后使用Javascript删除
- 为收音机点击的输入添加值,然后删除
- Chrome扩展程序 - 页面更新两次,然后在YouTube上删除
- jQuery 插入,然后淡出,然后删除
- JQuery 测试元素是可见的还是隐藏的,然后添加删除类
- 查找文档,然后在数组中查找条目并将其从数组中删除
- 如何删除元素的结束标记,添加一些文本,然后重新添加标记
- 从mysql数据库中删除项目,然后返回最后一页
- removeChild,然后再次添加以前删除的Child以重新加载并清理它
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- JS如何捕获基于键入然后删除的字符的字段验证逻辑
- 从页面上点击的链接中删除数据,然后移动到下一页&在CasperJS中重复
- 如何使用vanillaJS将mp4视频插入到具有特定维度的html文档中,播放2秒,然后删除节点
- 如何添加事件侦听器,删除它,然后再次添加它
- 如何在ActionLink中调用删除前的确认消息,然后调用控制器进行删除
- jQuery 删除然后再次添加以进行实时搜索
- onchange在页面加载时不起作用,直到我删除然后将其添加回代码
- Angular2-NgFor内部树模型:删除然后添加元素时顺序错误