Main Content

listener

클래스: handle

이벤트 소스에 바인딩하지 않고 이벤트 리스너 생성

구문

eL = listener(hSource,EventName,callback)
eL = listener(hSource,PropertyName,EventName,callback)

설명

eL = listener(hSource,EventName,callback)은 이름이 EventName인 이벤트에 대한 리스너를 생성합니다. hSource는 이벤트 소스인 핸들 객체입니다. callback은 이벤트가 트리거될 때 MATLAB®이 호출하는 함수 핸들입니다.

hSource가 이벤트 소스 객체로 구성된 배열인 경우, 리스너는 삭제 상태에 있지 않은 배열의 각 객체에 대한 명명된 이벤트에 응답합니다.

eL = listener(hSource,PropertyName,EventName,callback)은 미리 정의된 속성 이벤트 중 하나에 대한 리스너를 생성합니다. 다음과 같이 4개의 미리 정의된 속성 이벤트가 있습니다.

이벤트 이름이벤트 발생 시기
PreSet

속성값이 설정되기 직전, set 액세스 메서드를 호출하기 전에 발생함

PostSet

속성값을 설정한 직후에 발생함

PreGet

속성값 쿼리가 처리되기 직전, get 액세스 메서드를 호출하기 전에 발생함

PostGet

쿼리에 속성값을 반환한 직후에 발생함

입력 인수

모두 확장

이벤트 소스인 핸들 객체로, 단일 객체나 객체로 구성된 배열로 지정됩니다.

소스 객체에서 트리거되는 이벤트의 이름으로, 따옴표로 묶인 텍스트(대/소문자 구분)로 지정됩니다. 속성 이벤트의 경우, 이벤트 이름은 4개의 미리 정의된 속성 이벤트 중 하나입니다.

데이터형: char | string

해당 속성 이벤트가 리스너를 트리거하는 속성의 이름으로, 다음 값 중 하나로 지정됩니다.

  • 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열(여기서 각 문자형 벡터는 hSource의 객체에 대해 정의된 속성 이름임)

  • string형 또는 string형 배열(여기서 각 string형은 hSource의 객체에 대해 정의된 속성 이름임)

  • hSource에 있는 객체에 대해 정의된 속성에 대응하는 스칼라 matlab.metadata.Property 객체이거나 matlab.metadata.Property 객체로 구성된 배열

hSource가 스칼라인 경우에만 동적 속성의 속성 이벤트에 리스너를 연결할 수 있습니다. hSource가 스칼라 이외의 값이면 속성이 hSource의 클래스에 속해야 하고 동적 속성을 포함할 수 없습니다(동적 속성은 이 클래스 정의에 포함되지 않음).

소스 속성을 정의하는 클래스는, 속성 이벤트를 수신 대기할 수 있도록 GetObservableSetObservable 속성 특성을 설정해야 합니다.

리스너 콜백으로, 함수 핸들로 지정됩니다.

데이터형: function_handle

출력 인수

모두 확장

리스너 객체로, event.listener 또는 event.proplistener 객체에 대한 핸들로 반환됩니다.

예제

모두 확장

그래픽스 figure 창의 Color 속성에 대한 속성 리스너를 생성합니다.

fig = figure;
propListener = listener(fig,'Color','PostSet',@(src,evnt)disp('Color changed'));

Color 속성의 값을 yellow로 설정합니다. 속성을 설정하면 Figure에서 PostSet 속성 이벤트가 트리거됩니다. 이벤트 소스 객체는 핸들 fig에서 참조된 특정 Figure입니다.

set(fig,'Color','yellow')

리스너 객체를 삭제합니다.

delete(propListener)

리스너 라이프사이클

리스너를 제거하려면 listener에서 반환되는 리스너 객체를 삭제하십시오. 예를 들어, 아래 명령문은 핸들 클래스 delete 메서드를 호출하여 리스너를 제거합니다.

delete(el)

리스너 객체에 대해 삭제를 호출하면 리스너가 파괴되므로, 이벤트가 발생해도 더 이상 콜백 함수가 실행되지 않습니다.

listener 메서드는 리스너의 라이프사이클을 이벤트 소스인 객체로 바인딩하지 않습니다. 이벤트 소스 객체가 파괴돼도 리스너 객체의 라이프사이클에는 영향을 주지 않습니다.

소스 객체와 상관없이, listener 메서드로 생성한 리스너를 명시적으로 파괴해야 합니다. 리스너 변수에서 핸들 삭제 메서드를 호출하면(예: delete(el)) 리스너가 명시적으로 파괴됩니다. 리스너를 포함하는 변수를 다시 정의하거나 지우면 리스너에 대한 다른 참조가 없을 경우 리스너가 삭제될 수 있습니다. 리스너의 라이프사이클을 이벤트 소스 객체의 라이프사이클에 바인딩하려면 addlistener를 사용하십시오.

대안

MATLAB이 리스너 라이프사이클을 관리하도록 하려면 addlistener를 사용하십시오.

버전 내역

R2017b에 개발됨