Aus OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
Insgesamt 5 Ebenen der Speicherwarnung (-1,3).
In Bezug auf die Beschreibung der Warnung zur Speicherebene ist die Antwort von @ KennyTM ausgezeichnet.
Ich möchte einige verwandte Punkte hinzufügen, die PM und anderen helfen können.
Was sollten Sie tun, wenn Sie eine Warnung zur Speicherebene haben?
Nach Erhalt einer dieser Warnungen sollte Ihre Handler-Methode sofort nicht mehr benötigten Speicher freigeben. Das Standardverhalten der UIViewController-Klasse besteht beispielsweise darin, ihre Ansicht zu löschen, wenn diese Ansicht derzeit nicht sichtbar ist. Unterklassen können das Standardverhalten ergänzen, indem zusätzliche Datenstrukturen gelöscht werden. Eine App, die einen Cache mit Bildern verwaltet, reagiert möglicherweise mit der Freigabe von Bildern, die derzeit nicht auf dem Bildschirm angezeigt werden.
Wie wird die Warnung zur Speicherebene beachtet?
Von http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Wenn das System eine Warnung zu wenig Speicher an Ihre App sendet, reagieren Sie sofort. iOS benachrichtigt alle laufenden Apps, wenn die Menge an freiem Speicher unter einen sicheren Schwellenwert fällt. (Suspendierte Apps werden nicht benachrichtigt.) Wenn Ihre App diese Warnung erhält, muss sie so viel Speicher wie möglich freigeben. Der beste Weg, dies zu tun, besteht darin, starke Verweise auf Caches, Bildobjekte und andere Datenobjekte zu entfernen, die später neu erstellt werden können.
UIKit bietet verschiedene Möglichkeiten, um Warnungen zu wenig Speicher zu erhalten, darunter die folgenden:
- Implementieren Sie die applicationDidReceiveMemoryWarning: -Methode Ihres App-Delegaten.
- Überschreiben Sie die didReceiveMemoryWarning-Methode in Ihrer benutzerdefinierten UIViewController-Unterklasse.
- Registrieren Sie sich, um die UIApplicationDidReceiveMemoryWarningNotificationnotification zu erhalten.
Wie können Sie den Speicherbedarf Ihrer App reduzieren?
- Beseitigen Sie Speicherlecks.
- Machen Sie Ressourcendateien so klein wie möglich.
- Verwenden Sie Core Data oder SQLite für große Datenmengen.
- Laden Sie Ressourcen träge.
- Erstellen Sie Ihr Programm mit der Option Daumen.
Details unter http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Wie kann man Speicher mit Bedacht zuweisen?
- Reduzieren Sie die Verwendung von automatisch freigegebenen Objekten : Mit der automatischen Referenzzählung (ARC) ist es besser, Objekte zuzuweisen / zu initialisieren und sie vom Compiler zum richtigen Zeitpunkt für Sie freigeben zu lassen. Dies gilt auch für temporäre Objekte, die Sie in der Vergangenheit möglicherweise automatisch freigegeben haben, um zu verhindern, dass sie über den Umfang der aktuellen Methode hinausgehen.
- Ressourcenbeschränkungen auferlegen: Vermeiden Sie das Laden einer großen Ressourcendatei, wenn eine kleinere ausreicht. Verwenden Sie anstelle eines hochauflösenden Bildes ein Bild, das für iOS-basierte Geräte geeignet ist. Wenn Sie große Ressourcendateien verwenden müssen, finden Sie Möglichkeiten, um nur den Teil der Datei zu laden, den Sie zu einem bestimmten Zeitpunkt benötigen. Verwenden Sie beispielsweise die Funktionen mmap und munmap, anstatt Teile der Datei in den Speicher zu laden, anstatt Teile der Datei in den Speicher zu laden. Weitere Informationen zum Zuordnen von Dateien zum Speicher.
- Vermeiden Sie unbegrenzte Problemgruppen : Für unbegrenzte Problemgruppen ist möglicherweise eine beliebig große Datenmenge erforderlich. Wenn das Set mehr Speicher benötigt als verfügbar ist, kann Ihre App die Berechnungen möglicherweise nicht abschließen. Ihre Apps sollten solche Sätze nach Möglichkeit vermeiden und Probleme mit bekannten Speicherbeschränkungen bearbeiten.