Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 메모리 그래프 도구가 MVMCROSS 응용 프로그램에서주기 유지를 식별하는 데 도움이 될 수 있습니까?


메모리 그래프 도구가 MVMCROSS 응용 프로그램에서주기 유지를 식별하는 데 도움이 될 수 있습니까?


예, Xcode의 메모리 그래프 도구는 MVVMCross 응용 프로그램의 유지주기를 식별하는 데 도움이 될 수 있습니다. 다음은 작동 방식과 MVVMCross에 적용 할 수있는 방법입니다.

##주기 유지 이해

두 개 이상의 객체가 서로에 대한 강한 참조를 가질 때주기가 발생하여 메모리에서 거래되는 것을 방지합니다. 이는 iOS 개발에서 일반적인 문제입니다. 특히 객체를 강력하게 포착하는 대의원이나 클로저를 사용할 때 특히 그렇습니다.

메모리 그래프 도구 사용

1. 앱 실행 및 스냅 샷 가져 오기 : 메모리 그래프 도구를 사용하려면 MVMCross 응용 프로그램을 Xcode에서 실행하고 코어 흐름을 탐색하십시오. 특히 거래 해야하는 뷰 또는 뷰 모델을 탐색 한 후 다른 지점에서 메모리 스냅 샷을 가져옵니다.

2. 스냅 샷 분석 : 메모리 그래프 디버거에서 왼쪽 패널은 인스턴스 수와 함께 현재 메모리에있는 모든 객체를 표시합니다. 거래되었지만 여전히 존재하는 물체를 찾으십시오. 시간이 지남에 따라 클래스의 인스턴스 수가 증가하면 유지주기가 나타날 수 있습니다.

3. 사이클 유지 사이클 식별 : 왼쪽 패널의 객체를 선택하여 객체 그래프를 볼 수 있습니다. 그래프는 객체를 메모리에 유지하는 참조를 보여줍니다. 굵은 선은 강한 참조를 나타내고 밝은 회색 선은 알려지지 않은 참조 (약하거나 강할 수 있음)를 나타냅니다. 물체가 서로를 강하게 참조하는 루프가 보이면 유지주기 일 수 있습니다.

4. 고정주기 수정 : 고정주기를 식별 한 후에는 코드를 검토하여 강력한 참조가 생성되는 위치를 찾으십시오. 종종 여기에는 약한 참고 자료, 특히 대표 나 폐쇄에 대한 강력한 참고 문헌이 변경되는 것이 포함됩니다.

mvvmcross에 신청

MVVMCross 애플리케이션에서 View 모델은 뷰의 수명주기와 밀접하게 결합됩니다. 이로 인해 제대로 관리되지 않으면주기를 유지할 수 있습니다. 예를 들어,보기 모델이 뷰에 대한 강력한 참조를 보유하고보기가 뷰 모델 (아마도 바인딩을 통해)에 대한 강력한 참조를 보유하면 유지주기가 발생할 수 있습니다.

MVVMCross에서이를 피하려면 View to View 모델의 참조가 약한 지 확인하십시오. MVVMCross가 제공하는 수명주기 방법을 사용하여 (예 :`사라졌습니다 ')보기가 기각 될 때 강력한 참조를 정리하십시오. 또한 메모리 그래프 도구를 사용하여 내비게이션 스택에서 관련 뷰가 제거 될 때보기 모델이 올바르게 처리되는지 확인하십시오.

MVVMCross에서 유지주기를 식별하는 예

'myview'에 묶인 'myviewmodel'이 있다고 가정 해 봅시다. 'myview'가 'myviewmodel'에 대한 강력한 참조를 보유하고 있고 'myviewmodel'도`myview '(아마도 대표 또는 폐쇄를 통해)에 대한 강력한 참조를 보유하고 있다면,'myview '에서 멀리 떨어진 후에도 메모리에 남아있는 두 개체가 모두 기억됩니다. 메모리 그래프 도구를 사용하면이주기를 식별 한 다음 코드를 수정하여 필요한 경우 약한 참조를 사용합니다.

이러한 단계를 수행하고 메모리 그래프 도구를 사용하면 MVVMCross 응용 프로그램에서주기를 효과적으로 식별하고 해결하여 앱의 메모리 사용이 효율적이고 안정적으로 유지 될 수 있습니다.

인용 :
[1] https://doordash.engineering/2019/05/22/ios-memory-heaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycey-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-lod-of-viewmodels-and-never-disposing-s
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-mory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/where-retain-cycycles-are-and-removing-tem