MVVMCross 이벤트 구독에서 약한 참조를 사용하면 주로 메모리 관리 및 메모리 누출을 피하는 몇 가지 장점이 제공됩니다. 주요 이점은 다음과 같습니다.
1. 메모리 누출 예방 **
약한 참조를 사용하는 것의 주요 장점 중 하나는 메모리 누출을 방지하는 데 도움이된다는 것입니다. 기존의 이벤트 구독 모델에서 가입자 (예 :보기)가 이벤트를 제대로 구독하지 않으면 (예 :보기 모델에서) 더 이상 필요하지 않은 후에도 메모리를 유지할 수 있습니다. 이벤트 소스는 가입자에 대한 강력한 참조를 유지하여 쓰레기가 수집되는 것을 방지하기 때문입니다. 약한 참조는 가입자가 더 이상 응용 프로그램의 다른 곳에 참조되지 않으면 쓰레기 수집기가 메모리를 되 찾을 수 있도록 하여이 문제를 해결합니다 [3] [6].2. 단순화 된 구독 관리 **
약한 참조는 이벤트 구독 관리를 단순화합니다. 많은 이벤트 소스 및 가입자가있는 복잡한 응용 프로그램에서는 이벤트에서 수동으로 추적 및 수신을 해제하는 것이 번거 롭을 수 있습니다. 약한 이벤트 패턴은 가입자가 더 이상 필요하지 않은 경우 가입자를 제거하여 구독 관리의 복잡성을 줄임 으로써이 프로세스를 자동화합니다 [3].3. 뷰 모델과 뷰의 분리 **
MVVMCross에서 약한 참조를 사용하면보기 모델과 뷰 사이의 깨끗한 분리를 유지하는 데 도움이됩니다. View 모델이보기에 대한 강력한 참조를 유지하지 않도록함으로써, 뷰가 불필요하게 생존하는 것을 방지합니다. 이 분리는 강력하고 확장 가능한 아키텍처를 유지하는 데 중요하며, 더 이상 사용되지 않을 때 보는 가비지를 수집 할 수 있기 때문입니다 [2] [4].4. 이벤트 처리의 유연성 **
약한 참조는 이벤트 처리 시나리오에서 유연성을 제공합니다. 이벤트 구독에 대한 약한 참조에 의존하는 MVMCross 메신저 플러그인과 같은 메시징 시스템을 사용할 수 있습니다. 이 유연성은 이벤트 소스의 신원이 알려지지 않은 시나리오에서 유익합니다.그러나 약한 참고 자료는 이러한 장점을 제공하지만 일부 토론에서 언급 된 "좀비"문제와 같은 몇 가지 복잡성과 잠재적 문제도 소개한다는 점에 유의해야합니다. 이는 가입자가 아직 쓰레기가 수집되지 않았지만 여전히 약하게 참조되어 이벤트 핸들러가 호출되면 예상치 못한 행동으로 이어질 때 발생합니다 [1]. 이러한 과제에도 불구하고 약한 참조는 MVVMCross 응용 프로그램에서 이벤트 구독을 효과적으로 관리하는 데 귀중한 도구로 남아 있습니다.
인용 :[1] https://ladimolnar.com/2015/09/14/the---- event-pattern-is-dangerous/
[2] https://stackoverflow.com/questions/19378470/weak-referencing-in-mvvmcross-with-actiont
[3] https://mustafacanyucel.com/blog/blog-22.html
[4] https://gregshackles.com/weak-subscription-gotcha-in-mvvmcross/
[5] https://www.mvvmcross.com/documentation/plugins/messenger
[6] https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/weak-event-patterns?view=netdesktop-9.0
[7] https://stackoverflow.com/questions/310685/weak-reference-benefits
[8] https://github.com/mvvmcross/mvvmcross/issues/1480