Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross의 이벤트에서 구독 취소에 대한 모범 사례는 무엇입니까?


MVVMCross의 이벤트에서 구독 취소에 대한 모범 사례는 무엇입니까?


MVVMCross의 이벤트로부터 구독 취소는 메모리 누출을 방지하고 응용 프로그램이 예상대로 작동하도록하는 데 중요합니다. 다음은 MVVMCross의 이벤트에서 구독 취소에 대한 모범 사례입니다.

1.`imvxMessenger` ** 사용

MVVMCross는`IMVXMESSENGER` 플러그인을 제공하여 약한 참조를 사용하여 이벤트를 게시하고 구독 할 수 있습니다. 즉, 가입자 객체가 더 이상 코드의 다른 곳에서 참조되지 않으면 쓰레기가 수집되고 구독이 자동으로 제거됩니다. 그러나 명시 적으로 구독을 취소 해야하는 경우 'IMVXMESSENGER'에서 'UNSBSCRIBE'메소드를 사용하거나 '구독'방법 [1]에서 반환 한 구독 토큰에서`dispose ()`호출 '`dispose ()`를 호출 할 수 있습니다.

2. 구독 토큰 저장 **

`IMVXMESSENGER '를 사용하여 이벤트를 구독 할 때, 수동으로 구독을 취소하려는 경우 구독 토큰을 저장하는 것이 필수적입니다. 토큰이 저장되지 않고 쓰레기를 수집하면 구독이 자동으로 제거됩니다. 특정 기간 동안 가입이 활성화되는 경우 예기치 않은 행동으로 이어질 수 있습니다 [1] [7].

3.`idisposable` ** 구현

이벤트를 구독하는 클래스의 경우 'idisposable'인터페이스를 구현하는 것이 좋습니다. `dispose '방법에서는 이벤트를 명시 적으로 구독하여 더 이상 객체가 필요하지 않을 때 리소스가 릴리스되도록 할 수 있습니다. 이 접근법은 가입자가 [4] [9]를 폐기 할 때 이벤트 핸들러가 제거되도록함으로써 메모리 누출을 방지하는 데 도움이됩니다.

4. 불필요한 가입 피 **

필요한 경우 이벤트 만 구독하고 구독이 더 이상 필요하지 않은 경우 구독 취소인지 확인하십시오. 클래스 인스턴스의 수명 내에서 동일한 사건에 반복적으로 구독하고 구독하지 않으면 불필요한 복잡성과 잠재적 문제가 발생할 수 있으므로 [4].

5. 약한 참조 사용 **

MVVMCROSS의`IMVXMESSENGER '는 기본적으로 약한 참조를 사용하여 가입자가 더 이상 코드의 다른 곳에서 참조되지 않으면 가입자를 수집 할 수 있습니다. 이것은 메모리 누출을 방지하는 데 도움이되지만 수동 수신이 필요한 경우 구독 토큰을 신중하게 관리해야합니다 [1] [3].

6. 응용 프로그램 라이프 사이클 이벤트 처리 **

MVVMCross에서는`app.xaml.cs` 파일의`onexit '과 같은 애플리케이션 라이프 사이클 이벤트를 처리 할 수도 있습니다. 응용 프로그램이 종료 될 때 이벤트를 청소하거나 구독을 취소 해야하는 경우이를 수행하기에 적합한 장소입니다. 그러나 필요한 조회수 또는 서비스에 대한 참조가 필요한 조치를 수행하기 위해 [2]를 수행하십시오.

이러한 관행을 따르면 MVVMCross의 이벤트 구독을 효과적으로 관리하고 응용 프로그램에 효율적이고 메모리 누출이 없는지 확인할 수 있습니다.

인용 :
[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] http://stackoverflow.com/questions/30848118/capturing-the-onexit-event-in-wpf-with-mvvmcross/31784453
[3] https://prismlibrary.github.io/docs/event-aggregator.html
[4] https://www.reddit.com/r/csharp/comments/12x8e2w/always_remove_event_hander_handler_first_before_adding/
[5] https://www.mvvmcross.com/documentation/fundamentals/navigation
[6] https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-subscribe-ton-ensubsbribe-from-events
[7] https://stackoverflow.com/questions/19781446/how-to-unsubscribe-for-weaksubscribe-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://dev.to/moh_moh701/c-advanced-unsubscribing-from-events-7ea
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle