'a', 'b'및 'c'의 세 객체가 있다고 가정합니다. 'a'및 'c'는 정적으로 참조 된 서비스 단독 개체입니다. 'b'객체가 수명이 짧습니다. 즉, 정적 참조가 활성 상태를 유지하지 않습니다.한 개체의 메서드를 다른 개체로 전달하면 첫 번째 개체가 활성 상태를 유지합니까?
이제 'a'객체가 'b'객체의 인스턴스를 메소드 중 하나의 범위에 생성한다고 가정 해 보겠습니다.
public B()
{
C.ActionList.Add (SomeMethod);
}
void SomeMethod()
{
...
}
이제 시간 객체 'B'가 살고 않습니다
B b = new B();
는 또한 클래스 B 이런 식으로 뭔가를 보이는 것으로 생각? 내 가정은 생성자를 호출 한 메서드의 범위를 벗어나서 살아 있다는 것입니다. 특히, 메서드가 객체 'c'의 'ActionList'에있는 한.
맞습니까? 그렇지 않다면 가비지 수집을하게됩니다. 'c'가 'ActionList'의 모든 메소드를 실행하면 어떻게됩니까?
보너스 질문 : 'B'에서의 메소드의 이름,하지만 익명의 생성자로 작성되지 않은 경우 무엇을 다음과 같이
public B()
{
C.ActionList.Add (() => {
...
});
}
+1 "이벤트 가입이 .NET 및 다른 언어에서"메모리 누수 "의 공통 소스 인 이유입니다. 자바 스크립트가 시작될 때 브라우저가 해제되지 않는 오래된 이벤트 핸들러로 인해 메모리가 누출됩니다. – samy