2014-05-14 6 views
2

이제 Flex 4와 AS3에서 작업하고 있습니다. 대부분의 경우 나는 addEventListener을 사용하고 있습니다. 이 리스너 기본 인수는 유형입니다. String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = false. 그러나 대부분의 개발자는 지난 3 가지 주장을 고려하지 않았습니다. 그러나이 3 가지 주장의 용도를 알고 싶습니다.AS3 - addEventListener 인수 사용

누구든지 전화 해 응답 하시겠습니까?

+0

마지막 세 가지 인수 *가 고려되지만 사용은 상황에 따라 다르므로 대부분 사용되지 않습니다. 아래에 설명 된 다른 이유. – Vesper

답변

3

대개 3 개의 마지막 매개 변수는 필요하지 않습니다. 왜냐하면 프로그래밍 패턴을 사용하여 종속성을 관리하는 것이 일반적이기 때문에 디버그하기 어려운 스파게티 코드에 남겨 두는 것이 더 좋기 때문입니다.

는하지만, 그들을위한 목적이 있고 그들은 매우 유용하게 사용할 수 있습니다

  • useCapture를 - 우리가 설정 한 이벤트 파견 캡처 단계에 대한 이벤트 대상의 조상에 리스너를 등록하려면 다음과 같이 addEventListener()의 세 번째 매개 변수 인 useCapture를 true로 설정합니다.

    theAncestor.addEventListener (myEvent, MyListener, true);

    코드는 AS3가 theAncestor의 자손 중 하나를 대상으로하는 myEvent를 해당 자손이 이벤트 알림을 받기 전에 디스패치 할 때마다 MyListener()가 실행되도록합니다.

  • 우선 순위 - 개체에 둘 이상의 이벤트 수신기를 추가하면 우선 순위가 더 높은 이벤트 수신기가 먼저 트리거됩니다. 우선 순위가 동일한 리스너를 두 개 이상 추가하면 먼저 추가 된 리스너가 먼저 트리거됩니다. 오브젝트를 만들 때 이벤트 리스너를 추가했으나 나중에 다른 리스너를 추가해야하고 새 리스너를 먼저 실행해야한다고 상상해보십시오. 더 높은 우선 순위로 등록하려면 트릭을해야합니다.

  • weakReference - Flash의 가비지 수집기가 언제든지 실행될 수 있기 때문에 weakReference는 일반적으로 사용되지 않습니다. 문제는 약한 참조의 사용에 관계없이 오브젝트가 가비지 수집 될 때까지 이벤트를 계속 수신하고 디스패치 할 수 있다는 것입니다. 이 리스너에 대한 다른 참조가 프로그램에 남아 그 이벤트에도 대한 명시 적으로 등록 될 때까지 기본적으로

    , 특정 이벤트에 대한 리스너 을 등록하는 객체는 리스너에 대한 참조를 유지합니다.

    값을으로 설정하면 개체가 가비지 수집 대상이 될 때 개체가 수신기에 대한 참조를 잃게됩니다.

    메모리 누수를 방지하기 위해 사용되지만 useWeakReference는 리스너 객체가 디스패처보다 수명이 짧을 때만 효과가 있습니다. 그것을 사용하는 방법을 이해하는 것은 좋은 생각이지만, 실제로 그것을 피하고 추가 된 모든 리스너를 제거하는 클래스 내 메소드를 작성하기 만하면됩니다.

+0

정확히'useCapture'가 아니라면, 리스너가 첨부 된 객체가 다른 곳에서 완전히 참조 해제 된 경우에만 리스너 참조가 손실됩니다.이것을 true로 설정하면 이벤트 리스너를 명시 적으로 제거하지 않고 GC'ing을 수행 할 수 있습니다. 나는 개인적으로 청취자를 완전히 통제하는 것을 선호한다. – Vesper

+1

@CreativeMagic은 여러분이'weakReference'에 대해 쓴 것과 마찬가지입니다. 이벤트를 등록한 오브젝트가 수집 될 때까지 수집되지 않습니다 (아니면 수집 대상이 될 수도 있음). 적어도 그것은 그것을 이해하는 방법입니다. 그렇지 않으면 약한 청취자의 대부분은 전혀 쓸모가 없습니다. – Fygo

+0

@Fygo 당신 말이 맞아요, 그건 내 실수였습니다. 나는 약한 참조 부분을 편집했습니다. 다른 부분은 정확하다고 믿습니다. 내가 틀렸다고 생각되면 자유롭게 편집하거나 자신의 답변을 쓰거나 의견을 남겨주세요. –