2 Stimmen

Speicherverwaltung bei Multitasking in iOS 4

Laut Apple... sollten Anwendungen ihren Speicherbedarf so weit wie möglich reduzieren, wenn sie im "Hintergrund" (im angehaltenen Modus) laufen. Ich reduziere den Speicherbedarf meiner Anwendung, indem ich eine Reihe von 2D-Texturen in ApplicationDidEnterBackground freigebe und die gleichen Texturen in ApplicationWillEnterForeground wieder lade. Im Großen und Ganzen funktioniert alles.

Hier ist meine Frage: Warum erhalte ich einen SIGABRT oder EXEC_BAD_ACCESS, wenn ich meine Anwendung schnell in den/aus dem Hintergrund verschiebe? Die Fehler treten auf, wenn die App wieder in den Vordergrund kommt (Texturen werden neu geladen).

Ich erhalte keine Fehler, wenn ich die Anwendung weniger schnell in den/aus dem Hintergrund verschiebe. Wie kann ich das verhindern? Vielleicht sollte ich prüfen, ob die Ressourcen tatsächlich freigegeben wurden, bevor ich versuche, sie neu zu laden?

Wie kann man defensiv codieren in dieser Situation?

0voto

makdad Punkte 6352

Ich weiß, dass diese Frage schon älter ist, aber lassen Sie mich einen Versuch wagen. Sie erwähnten die Freigabe von 2D-Texturen. Verwenden Sie vielleicht Cocos2D?

Ich hatte Anfang des Jahres ein ähnliches Problem wie Sie - das Problem lag nicht an meinem Code. Es lag an Cocos2D - es gab einen Fehler, bei dem Texturen gleichzeitig mit dem asynchronen Laden neuer Texturen gelöscht werden konnten.

Ich habe das Problem gemeldet, und es scheint, dass ein Commit vom Februar an das Cocos2D-Projekt ein ähnliches Problem behoben hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X