5

Ich verwende GCD, um Speicherdruckbenachrichtigungen zu erhalten.Wie reagiert man auf Speicherdruckbenachrichtigungen von GCD?

GCD documentation beschreibt einige Konstanten wie folgt:

DISPATCH_MEMORYPRESSURE_WARN

Der Systemspeicher Druckzustand an der Warnstufe ist. Apps sollten Speicher freigeben, die sie gerade nicht benötigen.

DISPATCH_MEMORYPRESSURE_CRITICAL

Der Systemspeicher ist Druckzustand in der kritischen Phase. Die Apps sollten so viel Speicher wie möglich freigeben.

Scheint logisch, dass ich ungenutzten Speicher freigeben sollte. Aber auch in anderen Orten (man pages und source code) finde ich diese Notiz dieser Konstanten bezogen werden:

Erhöhte Speicherdruck ist eine systemweite Bedingung, dass Anwendungen für diese Quelle registriert durch Änderung ihrer Zukunft Speicher reagieren sollten Nutzungsverhalten, z durch Reduzieren der Cachegrößen von neu initiierten Operationen, bis der Speicherdruck wieder normal ist.

sollten jedoch Anwendungen nicht durchqueren, und vorhandene Caches für vergangene Operationen verwerfen, wenn das System System tem Speicherdruck tritt einen erhöhten Zustand ist, wie die wahrscheinlich VM Operationen auszulösen, die weiter weiter Ther Systemspeicherdruck verschlimmern.

Das verwirrt mich. Also sollte ich Speicher freigeben, oder sollte ich einfach aufhören, neuen Speicher zuzuweisen?

Antwort

0

MacOS hat ein virtuelles Speicher- (VM) -System, das einen Sicherungsspeicher verwendet: das Dateisystem. Das Dateisystem wird verwendet, um Speicher zu speichern, der gerade nicht verwendet wird. Wenn auf dem System wenig realer Speicher (RAM) verfügbar ist, können Dinge im Speicher, die nicht aktiv verwendet werden, auf die Festplatte geschrieben und später wieder in den RAM geladen werden.

iOS verfügt über ein virtuelles Speichersystem, aber keinen Sicherungsspeicher. Wenn der Speicher knapp wird, fordert das System die Apps auf, ihren Speicherbedarf zu reduzieren. Wenn das nicht genug Speicher freigibt, wird das System anfangen, Apps zu töten.

Die Anleitung, die Sie aus den libdispatch-Kopfzeilen zitieren, bezieht sich auf das virtuelle MacOS-Speichersystem, nicht auf iOS.

Auf iOS eine Anwendung sollte Verwerfungs Objekte und Cachegrößen reduzieren, wenn eine Warnung Speicherverwaltung. Besondere Aufmerksamkeit sollte Objekten gewidmet werden, die schmutzigen (nicht löschbaren) Speicher verwenden. Dies ist Speicher, den das System nicht automatisch selbst wiederverwenden kann - es muss zuerst von der Anwendung verworfen werden. In einer typischen iOS-Anwendung verwenden Bilder (Bilder) den schmutzigsten Speicher.