Beste Speicherzuweisungsstrategie für iOS?

7

Ich diskutiere mich über die Speicherzuweisung unter iOS. Ich schreibe den größten Teil meines Codes in C ++ und verwende sehr gerne ObjectPools, FreeLists usw. Um viele Dinge vorab zuzuweisen, die ich im Laufe meines Spiels ständig "zuweisen / freigeben" werde (wie z Partikel, Spieleinheiten usw.).

Unter iOS ist es nicht so, dass wir für eine Konsole wie PSP entwickeln, bei der ich sicher wissen kann, dass ich eine feste Speichermenge bekomme. iOS gibt "Speicherwarnungen" aus, wenn das System Speicher benötigt.

Hat jemand einige Vorschläge dazu? Ist es zu ernst, da der neue iPod touch / iPhone 4 mehr RAM hat? oder ist es immer noch ein großes Problem?

Mr.Gando
quelle

Antworten:

10

Verwenden Sie Ihren gemeinsamen Speicherverwaltungssinn. Verwenden Sie Pools / Freelists für Dinge, die häufig zugewiesen und freigegeben werden (z. B. Partikel), freie Speicherblöcke, die nicht verwendet werden. Versuchen Sie jedoch nicht, große Speicherblöcke im Voraus zuzuweisen. iOS garantiert weder Speicher noch tauscht es aus, sodass der von Ihnen zugewiesene Speicher dem System und anderen Apps Ressourcen entzieht. Wenn das System nicht genügend Arbeitsspeicher erhalten kann, weil Ihre Anwendung alles überlastet, wird Ihre App beendet. Sie sollten die applicationDidReceiveMemoryWarning für das verwenden, wofür sie entwickelt wurde, indem Sie so viel Speicher wie möglich freigeben. Das iPhone 4 verfügt zwar über viel Speicher, aber mit all den Multitasking-Funktionen und der Art und Weise, wie Benutzer sie verwenden, haben Sie möglicherweise weniger Speicher als Sie denken.

(Vergessen Sie auch nicht, Ihre App zu profilieren, um festzustellen, ob die Speicherzuweisung ein Engpass ist!)

5ound
quelle
1

Um eine Anmerkung zu 5ounds Antwort zu machen: Achten Sie auf die Stufe der Speicherwarnung. Vor iOS 3.2 gab es keine Möglichkeit, zwischen Warnungen unterschiedlichen Schweregrads zu unterscheiden (dh sitzt das Betriebssystem nur auf einer Reihe von UIImages, die gelöscht werden können, oder ist wirklich kein Speicher mehr vorhanden?). Ab 3.2 können Sie die Ebene der Speicherwarnung überprüfen, um zu bestimmen, wie Sie reagieren sollen. Nach meiner Erfahrung sind Warnungen der Stufe 1 konstant, unvermeidlich und weitgehend bedeutungslos, sodass ich keine drastischen Maßnahmen ergreifen würde, um darauf zu reagieren. Obwohl Warnungen der Stufe 2 nicht unbedingt ein Zeichen des bevorstehenden Untergangs sind, sollten Sie sie wahrscheinlich ernst nehmen und damit beginnen, alle Caches zu löschen, die Sie können usw.

Hier gibt es eine gute Diskussion der verschiedenen Ebenen: /programming/2915247/iphone-os-memory-warnings-what-do-the-different-levels-mean

PS - Dies ist eher ein Kommentar zu 5ounds Antwort, aber ich habe nicht genug Repräsentanten, um einen Kommentar abzugeben. Dies war meine einzige Option ...

Mattia
quelle
Und um das anzugehen: iOS 5 behandelt Speicherwarnungen etwas anders.
David Dunham