Z OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
łą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:
- Zaimplementuj metodę applicationDidReceiveMemoryWarning: delegata aplikacji.
- Zastąp metodę didReceiveMemoryWarning w niestandardowej podklasie UIViewController.
- Zarejestruj się, aby otrzymać powiadomienie UIApplicationDidReceiveMemoryWarningNotification.
Jak zmniejszyć ślad pamięciowy aplikacji?
- Eliminacja wycieków pamięci.
- Pliki zasobów powinny być jak najmniejsze.
- W przypadku dużych zestawów danych użyj danych podstawowych lub SQLite.
- Wczytuj zasoby leniwie.
- Zbuduj swój program za pomocą opcji Thumb.
Szczegóły na http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Jak mądrze przydzielać pamięć?
- Zredukuj użycie obiektów automatycznie udostępnianych : dzięki automatycznemu liczeniu odwołań (ARC) lepiej jest przydzielić / zainicjować obiekty i pozwolić kompilatorowi zwolnić je za Ciebie w odpowiednim czasie. Dzieje się tak nawet w przypadku obiektów tymczasowych, które w przeszłości mogły zostać automatycznie udostępnione, aby uniemożliwić im życie poza zakresem bieżącej metody.
- Nakładaj ograniczenia rozmiaru na zasoby : Unikaj ładowania dużego pliku zasobów, gdy wystarczy mniejszy. Zamiast używać obrazu o wysokiej rozdzielczości, użyj obrazu o odpowiednim rozmiarze dla urządzeń z systemem iOS. Jeśli musisz używać dużych plików zasobów, znajdź sposoby, aby załadować tylko tę część pliku, której potrzebujesz w danym momencie. Na przykład, zamiast ładować cały plik do pamięci, użyj funkcji mmap i munmap do mapowania części pliku do i z pamięci. Więcej informacji na temat mapowania plików do pamięci.
- Unikaj nieograniczonych zestawów problemów : nieograniczone zestawy problemów mogą wymagać arbitralnie dużej ilości danych do obliczenia. Jeśli zestaw wymaga więcej pamięci niż jest dostępne, aplikacja może nie być w stanie ukończyć obliczeń. Twoje aplikacje powinny unikać takich zestawów, gdy tylko jest to możliwe, i pracować nad problemami ze znanymi limitami pamięci.