Ich habe ein Problem mit einem Unterschied beim Memory Management von iOS, je nachdem ob ich ein DEBUG oder RELEASE Build der App erstellt.
Nachfolgend erst mal das Verhalten vom DEBUG Build, also in dem man ja normalerweise seine Apps entwickelt und testet.
Um zu verhindern, dass die App bei der Verarbeitung von sehr großen Dateien ggf. eine Memory Warnung erhält und beendet wird, wollte ich vorab prüfen, ob der benötigte Speicher der App auch zur Verfügung steht. Ich fordere daher per malloc() Speicher in der benötigten Größe an. Wenn der angeforderte Speicher nicht eh schon den RAM Speicher des iPads überschreitet, erhält man diesen auch. Anderenfalls wir NULL zurückgegeben. Soweit ok. Selbst wenn man den Speicher jetzt erhalten hat, heisst dies ja nicht, dass man diesen dann auch komplett verwenden darf. Also fülle ich den Speicher in kleinen Blöcken mit Dummy Daten und prüfe, per registrierter UIApplicationDidReceiveMemoryWarningNotification, ob es zwischenzeitlich eine Memory Warning gibt. Ist dies der Fall, dann hat sich die Sache für mich erlegt und die Daten können auf diesem iPad nicht verarbeitet werden. Anderenfalls kommt es bei der Verarbeitung leider zu mehreren Memory Warnings, auf die nicht mehr reagiert werden kann, und die App wird von iOS beendet. Mit dem Verhalten bin ich soweit zufrieden.
Das Problem ist jetzt, dass iOS für einen RELEASE Build ein komplett anderes Verhalten beim Memory Management hat.
Bei einem RELEASE Build erhalte ich immer den Speicher in der angeforderten Größe und kann diesen auch komplett mit Dummy Daten füllen, ohne eine Memory Warnung zu erhalten. Man kann sogar die bis zu 5-fache Größe (ca. 4GB) an Speicher anfordern und mit Dummy Daten füllen, ohne eine einzige Memory Warning zu erhalten. Eigentlich super und man sollte sich darüber freuen. Wenn ich dann allerdings versuche die sehr großen Datei zu verarbeiten erhält die App mehrere Memory Warnings, auf die dann nicht mehr reagiert werden kann, und die App wird von iOS beendet. Was soll dieser Blödsinn?
Lässt sich das Memory Management einer App ggf. über die Build Settings konfigurieren? Ich würde gerne für den RELEASE Build das Verhalten vom DEBUG Build verwenden, falls dies möglich ist. Welche Alternativen gibt es?
Nachfolgend erst mal das Verhalten vom DEBUG Build, also in dem man ja normalerweise seine Apps entwickelt und testet.
Um zu verhindern, dass die App bei der Verarbeitung von sehr großen Dateien ggf. eine Memory Warnung erhält und beendet wird, wollte ich vorab prüfen, ob der benötigte Speicher der App auch zur Verfügung steht. Ich fordere daher per malloc() Speicher in der benötigten Größe an. Wenn der angeforderte Speicher nicht eh schon den RAM Speicher des iPads überschreitet, erhält man diesen auch. Anderenfalls wir NULL zurückgegeben. Soweit ok. Selbst wenn man den Speicher jetzt erhalten hat, heisst dies ja nicht, dass man diesen dann auch komplett verwenden darf. Also fülle ich den Speicher in kleinen Blöcken mit Dummy Daten und prüfe, per registrierter UIApplicationDidReceiveMemoryWarningNotification, ob es zwischenzeitlich eine Memory Warning gibt. Ist dies der Fall, dann hat sich die Sache für mich erlegt und die Daten können auf diesem iPad nicht verarbeitet werden. Anderenfalls kommt es bei der Verarbeitung leider zu mehreren Memory Warnings, auf die nicht mehr reagiert werden kann, und die App wird von iOS beendet. Mit dem Verhalten bin ich soweit zufrieden.
Das Problem ist jetzt, dass iOS für einen RELEASE Build ein komplett anderes Verhalten beim Memory Management hat.
Bei einem RELEASE Build erhalte ich immer den Speicher in der angeforderten Größe und kann diesen auch komplett mit Dummy Daten füllen, ohne eine Memory Warnung zu erhalten. Man kann sogar die bis zu 5-fache Größe (ca. 4GB) an Speicher anfordern und mit Dummy Daten füllen, ohne eine einzige Memory Warning zu erhalten. Eigentlich super und man sollte sich darüber freuen. Wenn ich dann allerdings versuche die sehr großen Datei zu verarbeiten erhält die App mehrere Memory Warnings, auf die dann nicht mehr reagiert werden kann, und die App wird von iOS beendet. Was soll dieser Blödsinn?
Lässt sich das Memory Management einer App ggf. über die Build Settings konfigurieren? Ich würde gerne für den RELEASE Build das Verhalten vom DEBUG Build verwenden, falls dies möglich ist. Welche Alternativen gibt es?