1

EaselJS의 removeChild 메서드 (부분 중 Stage)는 해당 자식에 첨부 된 eventListeners의 정리도 처리합니까? 또는 자식을 제거하기 전에 removeEventListener을 사용하여 자식 이벤트 리스너를 수동으로 제거해야합니까? 예를 들어EaselJS removeChild는 연결된 eventListeners도 제거합니까?

:

stage = new createjs.Stage(canvas); 
circle = new createjs.Shape(); 
circle.graphics.beginFill("#333").drawCircle(0,0,5); 

circle.addEventListener("mousedown",function(event){ 
    console.log("mouse down"); 
}); 
stage.addChild(circle); 
. 
. 
. 
stage.removeChild(circle); 

답변

8
그들은 또한 addChild()에 추가되지 않습니다으로

EventListeners를이 removeChild()에 제거되지 않습니다 - 당신이 신속하게 모두를 제거 할 경우, 가장 빠른 방법이 될 것 myChild.removeAllEventListeners();

그러나 DisplayObject가 스테이지에 어떻게 든 연결되어 있지 않으면 이벤트는 스테이지와 그 자식을 통해 버블 링되기 때문에 마우스 상호 작용에 의해 전달되지 않습니다.

메모리 누수가 걱정되는 경우 : EaselJS의 이벤트는 DisplayObject 자체에 직접 놓여 있으므로 해당 객체에 대한 참조를 삭제할 때마다 GarbageCollecter에서도 이벤트를 수집해야합니다 (필요) 별도로 이벤트를 제거합니다. (제발, 만약 내가 틀렸다고 여기에서 누군가 나를 정정하십시오.)

+0

그래서 본질적으로 자식에 대한 유일한 참조가 부모에게서 왔고,'removeChild()'를 사용했다면, 실제로 가비지 컬렉션 방식의 이벤트 리스너? – jzweig

+1

그래, 나는 그것에 대해 95 % 확신하고 어떤 문제도 없었지만 슈퍼 저장을 원한다면 그냥'removeAllEventListeners()'를 추가하면된다. – olsn