Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross에서 약점과 강력한 회의 사용의 차이점은 무엇입니까?


MVVMCross에서 약점과 강력한 회의 사용의 차이점은 무엇입니까?


MVVMCross에서 다른 프레임 워크에서와 같이 약점을 사용하는 것과 강력한 회의 사이의 선택은 메모리를 관리하고 메모리 누출을 방지하는 데 중요합니다. 다음은 MVVMCross의 맥락에서 차이점과 어떻게 적용되는지에 대한 자세한 설명입니다.

강한 참조

** 강력한 참조는 C#을 포함한 대부분의 프로그래밍 언어에서 기본 유형의 참조 유형입니다. 물체를 강력하게 참조하면 쓰레기 수집기가 물체에 대한 모든 강력한 참조가 제거 될 때까지 수집 할 수 없습니다. 이것은 객체에 대한 강한 참조가 하나 이상있는 한 메모리에 남아 있음을 의미합니다.

MVVMCross에서 강력한 참조는 제대로 관리하지 않으면 메모리 누출로 이어질 수 있습니다. 예를 들어, ViewModel이보기에 대한 강력한 참조를 보유하고 View가 ViewModel에 대한 강력한 참조를 보유하면 유지주기가 생성됩니다. 이것은 두 물체가 더 이상 필요하지 않은 경우에도 쓰레기를 수집하는 것을 방지합니다.

약한 참조

** 반면에 약한 참조는 강한 참조가 존재하지 않으면 쓰레기 수집기가 참조 된 객체를 수집하도록 허용합니다. 이는 더 이상 필요하지 않은 경우 객체를 수집 할 수있는 시나리오에서 특히 유용하지만 사용할 수있는 경우에도 여전히 액세스하려고합니다.

MVVMCross에서는 약한 참고 문헌을 사용하여 뷰 모델과 뷰 사이의주기를 유지하지 않도록 권장됩니다. 예를 들어, ViewModel이보기를 강력하게 참조하는 대신 약한 참조 또는 메시징 시스템을 사용하여 이들 사이에 통신 할 수 있습니다. 이렇게하면 뷰 모델이 여전히 존재하더라도 뷰가 더 이상 필요하지 않을 때는 쓰레기를 수집 할 수 있습니다.

mvvmcross의 실제 예

일부 데이터가로드 될 때 ViewModel이보기에 알리는 시나리오를 고려하십시오. 일반적인 접근법은보기가 구독하는 뷰 모델에서 이벤트를 사용하는 것입니다. 그러나 View 가이 이벤트에 강력하게 구독하면 ViewModel에서 View로 강력한 참조를 만들어 뷰가 수집되는 것을 방지 할 수 있습니다.

이를 피하기 위해 MVVMCross는`leadsubscribe '와 같은 방법을 제공하여 View가 ViewModel의 이벤트를 약하게 구독 할 수 있습니다. 이런 식으로, 뷰 모델은 뷰에 대한 강력한 참조를 가지고 있지 않아 메모리 누출을 방지합니다.

mvvmcross에서 약한 참조를 사용하기위한 지침

-보기에 약한 참조를 사용하십시오 : 뷰 모델이보기와 상호 작용 해야하는 경우, 약한 참조 또는 메시징 시스템을 사용하여주기를 유지하지 마십시오.
-보기에 대한 강력한 참조를 피하십시오 : 뷰 모델이 더 이상 필요하지 않을 때 뷰를 수집 할 수 있도록보기에 대한 강력한 참조를 보유하지 않도록하십시오.
- 메시징 시스템 사용 : MVVMCross의`IMVXMESSENGER '와 같은 메시징 시스템을 사용하여 강력한 참조를 만들지 않고도 뷰 모델과 뷰 사이를 통신합니다.

이 지침을 따르면 MVVMCross 응용 프로그램에서 메모리를 효과적으로 관리하고 메모리 누출과 같은 일반적인 문제를 방지 할 수 있습니다.

인용 :
[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-more-overhead-than-strong-references/72765
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references
[4] https://www.reddit.com/r/swift/comments/8ifwy9/ios_mvvm_breaking_retainer_cycle_between/
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-reference
[6] https://langdev.stackexchange.com/questions/1351/beptroaches-for-implementing-weak-references
[7] https://putridparrot.com/blog/weakreferences-in-net/
[8] http://java-latte.blogspot.com/2014/07/difference-between-strongreference-weakreference-softreference-phantomreference-in-java.html