Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jak użyć debugera wykresu pamięci do zidentyfikowania cykli zachowania w aplikacjach MVVMCROSS


Jak użyć debugera wykresu pamięci do zidentyfikowania cykli zachowania w aplikacjach MVVMCROSS


Korzystanie z debugera wykresu pamięci w XCode jest skutecznym sposobem na zidentyfikowanie cykli zatrzymywania w aplikacjach MVVMCROSS. Oto przewodnik krok po kroku, jak to zrobić:

Wprowadzenie do debugera wykresu pamięci

Debuger wykresu pamięci jest potężnym narzędziem w XCode, które pomaga programistom identyfikować wycieki pamięci i zachować cykle, wizualizując relacje obiektów w pamięci. Zapewnia migawkę bieżącego stanu pamięci, pokazujący, które obiekty są zachowane i jak się odwołuje.

Kroki w celu zidentyfikowania cykli zatrzymania

1. Uruchom aplikację: Zacznij od uruchomienia aplikacji MVVMCROSS w Xcode. Upewnij się, że testujesz konkretną część aplikacji, w której podejrzewasz, że może wystąpić cykl zachowywania.

2. Otwórz debugger wykresu pamięci: Po uruchomieniu aplikacji otwórz debugger wykresu pamięci, klikając przycisk trzy-węzłowy znajdujący się między przyciskami debugera wizualnego a przyciskiem symulatora lokalizacji na pasku narzędzi Xcode. To uchwyci migawkę pamięci obecnego stanu aplikacji.

3. Analizuj migawkę pamięci: w lewym panelu debugera wykresu pamięci zobaczysz listę obiektów obecnie w pamięci, wraz z liczbą instancji każdej klasy. Poszukaj obiektów, które nie powinny tam być lub mają nieoczekiwanie dużą liczbę instancji.

4. Zidentyfikuj cykle Zachowaj: wybierz obiekt z lewego panelu, aby wyświetlić wykres odniesienia. Wykres pokaże silne odniesienia jako odważne linie i nieznane odniesienia (które mogą być słabe lub silne) jako jasnoszare linie. Cykl zachowania jest wskazywany przez pętlę na wykresie, w którym obiekty odwołują się do siebie w sposób, który uniemożliwia im rozdawanie.

5. Przejdź wykresy obiektów: Aby wyśledzić źródło cyklu zatrzymania, może być konieczne nawigację przez wiele wykresów obiektów. Zacznij od wyciekającego obiektu i postępuj zgodnie z referencjami wstecz, aby znaleźć obiekt nadrzędny, który go zachowuje.

6. Sprawdź szczegóły obiektu: Po kliknięciu węzła na wykresie panel inspekcji poda szczegółowe informacje o obiekcie, w tym jego właściwości i relacjach. Może to pomóc zrozumieć, dlaczego utrzymany jest obiekt.

7. Powtórz przepływy rdzenia: Aby potwierdzić cykl zachowania, kilka razy powtórz przepływ rdzenia lub funkcję w aplikacji, robiąc migawki pamięci po każdej iteracji. Jeśli liczba wystąpień konkretnego obiektu wzrośnie w czasie, może to wskazywać na cykl zachowania.

8. Napraw cykl zachowania: Po zidentyfikowaniu źródła cyklu zatrzymania możesz go naprawić, zmieniając silne odniesienia do słabych lub niezamieszkanych odniesień w stosownych przypadkach. Na przykład w zamknięciach użyj „[słabe ja], aby uniknąć silnego przechwytywania` `jaźń.

Wspólne scenariusze cyklu utrzymania w MVVMCROSS

W aplikacjach MVVMCROSS cykle zachowywane często występują z powodu silnych odniesień między modelami widoku a widokami lub z powodu mocno przechwytywania modeli lub widoków zamknięcia. Na przykład, jeśli model widoku ma silne odniesienie do widoku, a widok ma również silne odniesienie do modelu widoku, nie można go rozwodzić.

Aby zapobiec takich cykli, upewnij się, że modele widoku są odpowiednio oczyszczone po odrzuceniu widoków. Użyj metod cyklu życia dostarczone przez MVVMCROSS, takie jak „zniknięte ()`, aby uwolnić zasoby i złamać wszelkie niepotrzebne odniesienia.

Postępując zgodnie z tymi krokami i rozumiejąc, w jaki sposób relacje obiektów są wizualizowane w debuggerze wykresu pamięci, możesz skutecznie zidentyfikować i naprawić cykle utrzymujące w aplikacjach MVVMCROSS.

Cytaty:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-liak-with-memory-graph-debugger/
[4] https://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywalls.com/using-xcodes-memory-graph-to-find-memory-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/