In Bezug auf die schwarze Kunst der Speicherverwaltung auf iPhone OS-Geräten: Was bedeuten die verschiedenen Ebenen der Speicherwarnung? Level 1? Level 2? Geht das Zifferblatt auf 11?
Kontext: Nach einer langen Testphase mit Speicherstress - einschließlich der Ausführung meiner iPad-App mit der iPod Music Player-App - neige ich dazu, die zufälligen, aber seltenen Speicherwarnungen zu ignorieren, die ich erhalte. Meine App stürzt nie ab. Je. Meine App ist leckfrei. Und nun, die Mems-Warnungen scheinen einfach keine Rolle zu spielen.
Danke,
Doug
quelle
Warnungen auf Speicherebene werden von SpringBoard protokolliert. Als App-Entwickler müssen Sie sich nicht darum kümmern. Nur zu antworten
-{application}didReceiveMemoryWarning
ist genug.Es gibt 4 Warnstufen (0 bis 3). Diese werden vom Kernel Memory Watcher festgelegt und können von der nicht so öffentlichen Funktion
OSMemoryNotificationCurrentLevel()
abgerufen werden .Wie die Level ausgelöst werden, ist nicht dokumentiert. SpringBoard ist so konfiguriert, dass in jeder Speicherebene Folgendes ausgeführt wird:
Das Töten der aktiven App (Jetsam) wird aber nicht von SpringBoard übernommen
launchd
.quelle
libsystem_c.dylib
. Es wäre großartig, wenn ich es benutzen könnte. DankeAus OSMemoryNotification.h ,
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:
Wie können Sie den Speicherbedarf Ihrer App reduzieren?
Details unter http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Wie kann man Speicher mit Bedacht zuweisen?
quelle