Xcode에서 메모리 그래프 디버거를 사용하는 것은 MVVMCross 애플리케이션에서 유지주기를 식별하는 효과적인 방법입니다. 다음은 수행 방법에 대한 단계별 안내서입니다.
메모리 그래프 디버거 소개
메모리 그래프 디버거는 Xcode의 강력한 도구로 개발자가 메모리에서 객체 관계를 시각화하여 메모리 누출을 식별하고주기를 유지하도록 도와줍니다. 현재 메모리 상태의 스냅 샷을 제공하여 어떤 객체가 유지되는지와 참조 방법을 보여줍니다.
유지주기를 식별하는 단계
1. 앱 실행 : Xcode에서 MVMCROSS 응용 프로그램을 실행하여 시작하십시오. 유지주기가 발생할 수 있다고 의심되는 앱의 특정 부분을 테스트하고 있는지 확인하십시오.
2. 메모리 그래프 디버거 열기 : 앱이 실행되면 Xcode 도구 모음에서 Visual Debugger와 Location Simulator 버튼 사이에있는 3 노드 버튼을 클릭하여 메모리 그래프 디버거를 엽니 다. 이렇게하면 앱의 현재 상태의 메모리 스냅 샷이 캡처됩니다.
3. 메모리 스냅 샷 분석 : 메모리 그래프 디버거의 왼쪽 패널에는 각 클래스의 인스턴스 수와 함께 현재 메모리에있는 객체 목록이 표시됩니다. 존재하지 않아야하거나 예기치 않게 많은 인스턴스가있는 개체를 찾으십시오.
4. RETAIN CYCHS 식별 : 왼쪽 패널에서 객체를 선택하여 참조 그래프를보십시오. 그래프는 강력한 참조를 대담한 선으로 표시하고 밝은 회색 선으로 알려지지 않은 참조 (약하거나 강할 수 있음)를 보여줍니다. 고정 사이클은 객체가 거래를 방지하는 방식으로 객체가 서로를 참조하는 그래프의 루프로 표시됩니다.
5. 객체 그래프 탐색 : 고정 사이클 소스를 추적하려면 여러 객체 그래프를 탐색해야 할 수도 있습니다. 유출 된 물체부터 시작하여 참조를 뒤로 따라 가서 유지하는 부모 객체를 찾으십시오.
6. 객체 세부 정보 검사 : 그래프의 노드를 클릭하면 검사 패널은 특성 및 관계를 포함하여 객체에 대한 자세한 정보를 제공합니다. 이를 통해 객체가 유지되는 이유를 이해하는 데 도움이됩니다.
7. 코어 흐름을 반복하십시오 : 고정 사이클을 확인하려면 앱의 코어 흐름 또는 기능을 여러 번 반복하여 각 반복 후에 메모리 스냅 샷을 가져옵니다. 특정 물체의 인스턴스 수가 시간이 지남에 따라 증가하면 유지주기를 나타낼 수 있습니다.
8. 고정 사이클 수정 : 왼쪽주기의 소스를 식별 한 후에는 적절한 경우 약하거나 소유하지 않은 참조에 대한 강력한 참조를 변경하여이를 고칠 수 있습니다. 예를 들어, 폐쇄에서`[약한 자아]`를 사용하여 '자기'를 강하게 포착하지 않도록하십시오.
MVVMCross의 Common Real Restain 사이클 시나리오
MVMCROSS 응용 분야에서, 유지주기는 종종 뷰 모델과 뷰 사이의 강한 참조 또는 뷰 모델 또는 뷰를 강력하게 캡처하는 클로저로 인해 종종 발생합니다. 예를 들어,보기 모델이보기에 대한 강력한 참조를 보유하고 View가보기 모델에 대한 강력한 참조를 보유하는 경우, 도달 할 수는 없습니다.
이러한주기를 방지하려면보기가 해제 될 때보기 모델이 올바르게 정리되도록하십시오. MVVMCross가 제공하는 수명주기 방법, 예 :`사라진 ()``를 사용하여 리소스를 공개하고 불필요한 참조를 중단하십시오.
이러한 단계를 수행하고 메모리 그래프 디버거에서 객체 관계가 어떻게 시각화되는지 이해함으로써 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://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-to-find-mory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/