Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Czy narzędzie do wykresu pamięci może pomóc w identyfikacji cykli zatrzymania w aplikacjach MVVMCROSS


Czy narzędzie do wykresu pamięci może pomóc w identyfikacji cykli zatrzymania w aplikacjach MVVMCROSS


Tak, narzędzie do wykresu pamięci w Xcode może pomóc zidentyfikować cykle zachowania w aplikacjach MVVMCROSS. Oto jak to działa i jak można go zastosować do MVVMCROSS:

Zrozumienie zachowania cykli

Cykle zachowane występują, gdy dwa lub więcej obiektów zawiera silne odniesienia do siebie, uniemożliwiając im rozdawanie pamięci. Jest to powszechny problem w tworzeniu iOS, szczególnie podczas korzystania z delegatów lub zamknięć, które silnie wychwytują obiekty.

Korzystanie z narzędzia do wykresu pamięci

1. Uruchamianie aplikacji i robienie migawek: Aby użyć narzędzia do wykresu pamięci, uruchom aplikację MVVMCROSS w Xcode i przejść przez jej przepływy rdzenia. Zrób migawki pamięci w różnych punktach, szczególnie po nawigacji z widoków lub wyświetlania modeli, które należy rozwodzić.

2. Analiza migawek: W debuggerze wykresu pamięci lewy panel wyświetla wszystkie obiekty obecnie w pamięci, wraz z ich liczbą instancji. Poszukaj obiektów, które powinny być rozdawane, ale nadal są obecne. Wzrost liczby instancji klasy w czasie może wskazywać na cykl zachowania.

3. Identyfikacja cykli zatrzymania: Wybierz obiekt w lewym panelu, aby wyświetlić wykres obiektu. Wykres pokazuje odniesienia, które utrzymują obiekt w pamięci. Bold linie wskazują silne odniesienia, podczas gdy jasnoszare linie wskazują nieznane odniesienia (które mogą być słabe lub silne). Jeśli widzisz pętlę, w której obiekty silnie się odwołują, prawdopodobnie jest to cykl zachowywania.

4. Uprawianie cykli zatrzymywania: Po zidentyfikowaniu cyklu zachowania sprawdź kod, aby znaleźć, gdzie tworzone są silne odniesienia. Często wymaga to zmiany silnych odniesień do słabych odniesień, szczególnie w delegatach lub zamknięciach.

Zastosowanie do MVVMCROSS

W aplikacjach MVVMCROSS modele widoku są ściśle sprzężone z cyklem życia widoków. Może to czasem prowadzić do zatrzymania cykli, jeśli nie jest właściwie zarządzane. Na przykład, jeśli model widoku ma silne odniesienie do widoku, a widok ma również silne odniesienie do modelu widoku (być może poprzez wiązanie), może wystąpić cykl zachowywania.

Aby uniknąć tego w MVVMCROSS, upewnij się, że wszelkie odniesienia od poglądów do modeli widokowych są słabe. Użyj metod cyklu życia dostarczone przez MVVMCROSS (jak „zniknięte”), aby oczyszczyć wszelkie silne odniesienia po odrzuceniu poglądów. Dodatkowo użyj narzędzia do wykresu pamięci, aby sprawdzić, czy modele widoku są poprawnie rozdzielone, gdy powiązane widoki są usuwane ze stosu nawigacji.

##

Załóżmy, że masz „myViewModel”, który jest związany z „myView”. Jeśli „myView” ma silne odniesienie do „myViewModel”, a „myViewModel” ma również silne odniesienie do „myView” (być może przez delegat lub zamknięcie), zobaczysz oba obiekty pozostające w pamięci nawet po wyjściu z „myView”. Korzystając z narzędzia do wykresu pamięci, zidentyfikujesz ten cykl, a następnie zmodyfikować kod, aby w razie potrzeby użyć słabych referencji.

Podążając za tymi krokami i korzystając z narzędzia do wykresu pamięci, możesz skutecznie zidentyfikować i rozwiązywać cykle w aplikacjach MVVMCROSS, zapewniając, że użycie pamięci aplikacji pozostaje wydajne i stabilne.

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://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-eep--fold-viewmodels-and-neving-disposing-w
[7] https://www.donnywalls.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/KNowing-where-retain-Cycles-are-and-Removing-them