Odnośnie czarnej sztuki zarządzania pamięcią na urządzeniach iPhone OS: co oznaczają różne poziomy ostrzeżeń dotyczących pamięci. Poziom 1? Poziom 2? Czy tarcza wskazuje 11?
Kontekst: Po szeroko zakrojonym okresie testów obciążeniowych pamięci - w tym po uruchomieniu aplikacji na iPada z włączoną aplikacją odtwarzacza muzyki na iPodzie, jestem skłonny zignorować losowe, ale rzadkie ostrzeżenia dotyczące pamięci, które otrzymuję. Moja aplikacja nigdy się nie zawiesza. Zawsze. Moja aplikacja jest wolna od wycieków. No cóż, ostrzeżenia memów po prostu nie wydają się mieć znaczenia.
Dzięki,
Doug
źródło
Ostrzeżenia dotyczące poziomu pamięci są rejestrowane przez SpringBoard. Jako programista aplikacji nie musisz się tym przejmować. Wystarczy odpowiedzieć
-{application}didReceiveMemoryWarning
.Istnieją 4 poziomy ostrzeżeń (od 0 do 3). Są one ustawiane z obserwatora pamięci jądra i można je uzyskać za pomocą funkcji niepublicznej
OSMemoryNotificationCurrentLevel()
.Sposób wyzwalania poziomów nie jest udokumentowany. SpringBoard jest skonfigurowany do wykonywania następujących czynności na każdym poziomie pamięci:
Zabicie aktywnej aplikacji (jetsam) nie jest obsługiwane przez SpringBoard, ale
launchd
.źródło
libsystem_c.dylib
. Byłoby wspaniale, gdybym mógł to wykorzystać. DziękiZ OSMemoryNotification.h ,
łącznie 5 poziomów ostrzeżeń dotyczących pamięci (-1,3).
Jeśli chodzi o opis ostrzeżenia poziomu pamięci, odpowiedź @ KennyTM jest doskonała.
Chcę dodać kilka powiązanych punktów, które mogą pomóc PM i innym.
Co należy zrobić w przypadku ostrzeżenia o poziomie pamięci?
Po otrzymaniu któregokolwiek z tych ostrzeżeń, metoda obsługi powinna zareagować, natychmiast zwalniając niepotrzebną pamięć. Na przykład, domyślnym zachowaniem klasy UIViewController jest wyczyszczenie jej widoku, jeśli ten widok nie jest obecnie widoczny; podklasy mogą uzupełniać domyślne zachowanie, usuwając dodatkowe struktury danych. Aplikacja, która utrzymuje pamięć podręczną obrazów, może zareagować, udostępniając obrazy, których aktualnie nie ma na ekranie.
Jak przestrzegać ostrzeżenia o poziomie pamięci?
Z http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Gdy system wyśle ostrzeżenie o małej ilości pamięci do Twojej aplikacji, natychmiast odpowiedz. iOS powiadamia wszystkie uruchomione aplikacje, gdy ilość wolnej pamięci spadnie poniżej bezpiecznego progu. (Nie powiadamia o zawieszonych aplikacjach). Jeśli Twoja aplikacja otrzyma to ostrzeżenie, musi zwolnić jak najwięcej pamięci. Najlepszym sposobem na to jest usunięcie silnych odniesień do pamięci podręcznych, obiektów obrazów i innych obiektów danych, które można odtworzyć później.
UIKit zapewnia kilka sposobów otrzymywania ostrzeżeń o małej ilości pamięci, w tym następujące:
Jak zmniejszyć ślad pamięciowy aplikacji?
Szczegóły na http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Jak mądrze przydzielać pamięć?
źródło