2016-06-09 2 views
0

Вот мой код, я задаюсь вопросом, если удаление достаточно хорошо, чтобы уничтожить объект, и что нет утечки памяти:Удалить: как убедиться, что утечки памяти нет?

class Shoot extends MovableObject{ 
constructor(){ 
    super(); 
    this.speed = 2; 
    this.geometry = new THREE.CircleGeometry(0.5); 
    this.material = new THREE.MeshBasicMaterial({ color: 0xffffff }); 
    this.mesh = new THREE.Mesh(this.geometry, this.material); 
} 

setRotation(rotation){ 
    this.mesh.rotation.set(rotation.x, rotation.y, rotation.z); 
} 

setPosition(position){ 
    this.mesh.position.set(position.x, position.y, position.z); 
} 

}

Позже я получил эту функцию, listShoot является единственное место, где у меня есть Стреляй экземпляры:

var position; 
listShoot.forEach(function(shoot, i, list){ 
    position = shoot.getMesh().getWorldPosition(); 
    if(/*i want to destroy my shoot*/){ 
     list.splice(i, 1); 
     scene.remove(shoot.getMesh()); // This is ThreeJS 
     delete shoot; 
     console.log("shoot destroyed"); 
    } 
}); 
+0

есть память не утечка –

+0

Хотя есть ответ здесь, который был принят, есть дополнительные вещи, которые вы можете рассмотреть, если вы используете three.js. Поиск стека для чего-то типа "delete.txt.js" – 2pha

ответ

0

Хотя я не могу дать вам полный ответ, я знаю, что вы не можете удалить переменные, которые являются частью закрытия.

var myfunc = function(a, b, c) { 
    console.log(a,b,c); 
    delete b; 
    console.log(a,b,c); 
}; 

myfunc(1,2,3); 

Приведенный выше код будет выводить следующие:

Что касается сбора мусора в затворов have a look at this related question.


Вы всегда можете присвоить переменную undefined.

var myfunc = function(a, b, c) { 
    console.log(a,b,c); 
    b = undefined; 
    console.log(a,b,c); 
}; 

myfunc(1,2,3); 

Какие выходы:

1 2 3 
1 undefined 3 
0

Я думаю, вы просто должны обнулить переменную shoot, потерять связь. Как это:

shoot = null; 
console.log("shoot destroyed"); 
Смежные вопросы