Ich habe kürzlich Probleme mit der Speicherverwaltung in meiner App festgestellt.Extrem hohe Speicherbelegung - Umgang mit großen Bildern auf dem iPad?
Die Anwendung profitiert von einigen qualitativ hochwertigen Bildern und dies erhöht die Speicherauslastung extrem.
Hier sind einige Informationen über das Projekt und Bilder Details der Ausgabe deutlicher zu machen:
Es gibt rund 90 Bilder zu meinem Projekt hinzugefügt. Die Hälfte von ihnen sind in @ 2x Größe entworfen, um das neue iPad Retina Display zu unterstützen. So ist die maximale Anzahl der Bilder für jedes Gerät um 45.
Gesamtgröße der Retina-Version aller Bilder ist etwa 25 Megabyte (Größe jedes einzelnen Bildes ist variabel von 10 KB bis 6,8 MB). Inzwischen entspricht die Größe aller Standardbilder 11 Megabyte.
Die Größe des XCode-Archivs des Projekts entspricht 44 MegaBytes.
Die maximale Auflösung einzelner Bilder in der Standardversion der Bilder beträgt etwa 1500x4000 px, während die Mindestgröße bei 60x60 px liegt.
Die maximale Auflösung einzelner Bilder in der Retina-Version der Bilder beträgt etwa 3000x8000 px, während das Minimum bei 120x120 px liegt.
Retina-Version der Bilder haben "@ 2x ~ ipad" Suffix in ihrem Namen, während der Name Suffix für die anderen ist "~ ipad".
Es gibt nur eine Instanz der meisten Bilder, die während des App-Lebenszyklus erstellt werden.
Etwa 25 der Bilder werden während des App-Starts geladen und der Rest wird während des Spiels geladen.
Ich habe verwendet [UIImage imagenamed: @ "image_name.png"], wo ich ein Bild geladen werden soll (mit [UIImage imageWithContentsOfFile] und [UIImage imageWithData] war äußerst ineffizient).
Aber hier ist es ein Problem:
Wenn ich die Speichernutzung Instruments verfolgen mit Ich sehe, dass App-Speicherverbrauch extrem hoch ist. Hier sind die Statistiken der Speicherzuordnung der in verschiedenen Situationen:
zugewiesener Speicher auf dem iPad 2 unter Verwendung von Standard-Images beim Start: 58 MB
zugewiesener Speicher auf dem iPad 2 unter Verwendung von Standard-Bildern während des Spiels (wenn alle Bilder geladen): 131 MB
- zugewiesener Speicher auf neue iPad mit Retina-Bilder beim Start: 211 MB
- zugewiesener Speicher auf neue iPad mit Retina-Bilder während des Spiels (wenn alle Bilder geladen sind): 470 MB
Irgendwelche Ideen, warum zugewiesener Speicher viel höher ist als die Gesamtgröße von Bildern?
Warum laden Sie alle Bilder in den Speicher? Sie sollten die Verwendung von UIImage imageNamed vermeiden und stattdessen UIImage imageWithContentsOfFile verwenden, da das Bild später nicht dauerhaft im Speicher geladen wird. Auch wenn Ihre Bilder sehr groß sind, sollten Sie sie in einer CATiledLayer-Klasse zeichnen sie effizienter auf den Bildschirm – Lefteris
Ich lade alle Bilder im Speicher, weil sie alle vor und während des Spiels benötigt werden. Es folgt nicht einem üblichen Design wie andere Apps, und es ist erforderlich, diese Bilder zu laden. Mit anderen Worten, ich lade jedes Bild nur, wenn es benötigt wird, aber das Problem ist, dass es beim Start alle geladen werden muss: D –