iOS - zarządzanie pamięcią
Zarządzanie pamięcią w iOS było początkowo non-ARC (Automatic Reference Counting), gdzie musimy zachować i zwolnić obiekty. Teraz obsługuje ARC i nie musimy zatrzymywać i zwalniać obiektów. Xcode wykonuje zadanie automatycznie w czasie kompilacji.
Problemy z zarządzaniem pamięcią
Zgodnie z dokumentacją Apple, dwa główne problemy związane z zarządzaniem pamięcią to -
Zwalnianie lub nadpisywanie danych, które są nadal w użyciu. Powoduje uszkodzenie pamięci i zazwyczaj powoduje awarię aplikacji lub, co gorsza, uszkodzenie danych użytkownika.
Brak zwolnienia danych, które nie są już używane, powoduje wycieki pamięci. Kiedy przydzielona pamięć nie zostanie zwolniona, mimo że nigdy nie będzie ponownie używana, jest to znane jako wyciek pamięci. Wycieki powodują, że aplikacja używa coraz większej ilości pamięci, co z kolei może skutkować słabą wydajnością systemu lub (w iOS) zamknięciem aplikacji.
Zasady zarządzania pamięcią
Jesteśmy właścicielami tworzonych przez nas obiektów i musimy je później zwolnić, gdy nie są już potrzebne.
Użyj opcji Zachowaj, aby uzyskać prawo własności do obiektu, którego nie utworzyłeś. Te obiekty również musisz wypuścić, gdy nie są potrzebne.
Nie zwalniaj obiektów, których nie jesteś właścicielem.
Obsługa pamięci w ARC
Nie musisz używać zwolnienia i zachowania w ARC. Zatem wszystkie obiekty kontrolera widoku zostaną zwolnione, gdy kontroler widoku zostanie usunięty. Podobnie, podobiekty dowolnego obiektu zostaną zwolnione, gdy zostaną zwolnione. Zauważ, że jeśli inne klasy mają silne odniesienie do obiektu klasy, to cała klasa nie zostanie zwolniona. Dlatego zaleca się używanie słabych właściwości dla delegatów.
Narzędzia do zarządzania pamięcią
Możemy analizować wykorzystanie pamięci za pomocą narzędzi Xcode. Zawiera narzędzia takie jak Monitor aktywności, Alokacje, Wycieki, Zombie i tak dalej.
Kroki analizy alokacji pamięci
Step 1 - Otwórz istniejącą aplikację.
Step 2 - Wybierz Produkt, a następnie Profil, jak pokazano poniżej.
Step 3 - Wybierz opcję Alokacje na następnym ekranie pokazanym poniżej i wybierz opcję Profil.
Step 4 - Zobaczymy alokację pamięci dla różnych obiektów, jak pokazano poniżej.
Step 5 - Można przełączać się między kontrolerami widoku i sprawdzać, czy pamięć jest prawidłowo zwolniona.
Step 6 - Podobnie, zamiast alokacji, możemy użyć Monitora aktywności, aby zobaczyć całkowitą pamięć przydzieloną aplikacji.
Step 7 - Te narzędzia pomagają nam uzyskać dostęp do zużycia pamięci i zlokalizować miejsca, w których wystąpiły możliwe wycieki.