public class MyButton extends Sprite
{
public function MyButton(defaultHandler:Function)
{
addEventListener(MouseEvent.CLICK, defaultHandler);
}
}
// Main 클래스AS3 : 메모리 누수가 발생합니까?
var myButton:MyButton =new MyButton(someFunction);
addChild(myButton)
removeChild(myButton);
myButton = null;
IE가 무대에서 제거 될 때 나는 그것을 제거 구체적으로 구축 될 때 안에 내 버튼 클래스에서 익명의 마우스 클릭 이벤트 핸들러 함수를 추가하지 오전 밖으로 nulled.
이 개체가 가비지 수집기에 적합합니까? 그렇지 않으면 메모리 누수가 발생하지 않습니까? 또는 그 이후로 이벤트 리스너는 제거 된 객체를 참조하는 것일뿐입니다. ???
약한로 리스너를 설정, 제거하는 책임이있다 쓰레기 수집기로 옮겼습니다. GC를 믿어서는 안됩니다. 대부분 랜덤하기 때문에 시간이 좀 걸릴 수 있습니다. 약한 청취자는 자신의 코드를 정리할 책임이없는 게으른 개발자를위한 것입니다. 유일한 예외는 무대에있는 이벤트 리스너 일 수 있지만 항상 청취자를 직접 제거해야합니다. –
Agreed @ MarkKnol, 나는 항상 명시 적으로 그것을 제거합니다.즉, OP가 요구하는 것이 아닙니다. – sberry
약간 다른 시나리오이지만 비슷한 문제가있는 이걸 찾았습니다. 따옴표가있는 http://stackoverflow.com/questions/8471578/would-this-code-cause-memory-leakage : "useWeakReference 매개 변수가 true로 설정되어 있지 않으면 가비지 수집기가 ** 디스 패칭 개체가 존재하는 한 ** 청취자를 제거하지 않기 때문에 이벤트 리스너가 메모리에서 자동으로 제거되지 않습니다." - 이렇게하면 청취자가 참조하는 객체가 ** 더 이상 존재하지 않는 ** 유지해야하고 누출이 발생해서는 안됩니다 - 누구든지 확인할 수 있습니까? –