2014-12-05 1 views
1

나는 커다란 레거시 Flex 프로젝트를 물려 받았고 코드가 깊어 질수록 내가 점점 더 걱정이되었습니다. 예를 들어, 응용 프로그램 내에서 "창"유형 이미지 뷰어에 대한 코드를보고 있습니다. 표시 될 때마다 아래의 eventListener가 추가되고 절대로 제거되지 않습니다.동일한 params로 eventListener를 추가하고 이전 eventListeners를 바꿉니 까?

이것들은 강력한 참조이며 결코 삭제되지 않기 때문에 하나의 문제이지만 반복적으로 eventListeners를 추가하면 일시 중지됩니다. "창"은 앱의 라이프 사이클에서 여러 번 표시되거나 숨길 수 있습니다.

내 질문 :이가 그 N = (표시 시간의 4 * 번호) 이벤트 리스너를 가지고 의미는 무엇입니까? (... shudder).

빡빡한 예산에 대한 거대한 프로젝트 수정이므로 이런 종류의 문제를 해결할 것인지 아니면 그냥 놓아 둘지 결정하려고합니다. 그들이 다른 이벤트 리스너 인 경우

addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); 
addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 

답변

2

, 그들은 여러 번 추가됩니다. 이들 모두가 동일한 함수를 참조하면 매번 특정 함수를 한 번만 호출하여 오버라이드됩니다.

내가 무엇을 의미하는지에 관해 알기 위해 다음과 같은 간단한 예제를 시도 :

var s:Sprite = new Sprite(); //some sort of displayobject with EventDispatcher capabilities 
s.addEventListener(MouseEvent.CLICK, onClick); 
s.addEventListener(MouseEvent.CLICK, onClick); 

function onClick(e:MouseEvent):void{ 
    trace("hey"); 
} 

이 스프라이트에 누르면 당신에게 "안녕"이 아니라 두 개의 "안녕하세요"s의 콘솔 출력을 제공 할 것입니다. 당신이 스프라이트에 한 번 눌러

var s:Sprite = new Sprite(); 
s.addEventListener(MouseEvent.CLICK, onClick); 
s.addEventListener(MouseEvent.CLICK, onClick2); 

function onClick(e:MouseEvent):void{ 
trace("hey"); 
} 

function onClick2(e:MouseEvent):void{ 
trace("sup"); 
} 

이 당신에게 "안녕"과 "SUP"의 출력을 제공합니다 : 이제 다음을 고려.

정말로 걱정되는 경우, 이벤트 리스너에 약한 참조를 제공 할 수 있습니다. 프로젝트가 얼마나 복잡한 지 모르지만 한 번에 모든 eventlisteners를 없애기 위해 (예 : Event.REMOVED_FROM_STAGE를 기다린 다음 수동으로 리스너를 제거하는 등) 너무 많은 시간을 소모해서는 안됩니다. .

+0

감사합니다. 예, 동일한 eventListeners가 추가되었음을 의미했기 때문에 적어도 고아가 된 eventListeners는 없을 수도 있습니다. 내가 할 수있는 약한 심판을 할 수 있지만 클래스 ** 등 ** 많이있다 존재하지 않는 eventListener에 대한 removeEventListener를 호출하면 오류가 발생하는지 아십니까? –

+0

안된다. 그러나 확실히하기를 원한다면'hasEventListener (type : String)'을 앞에두고 if 조건문을 넣을 수있다. – DodgerThud

+0

내 경험에 의하면, 같은 조건의 리스너도 일부 상황에서 스택되며, 리스너를 스택하는 가장 큰 이벤트는'Event.ENTER_FRAME'입니다. – Vesper

관련 문제