2011-01-10 10 views
3

Ich habe Probleme mit UImage Speicherverwaltung.
(iphone) my app gets memory warning when instruments shows "all allocations" only 7mb?(iphone) UIImage Speicherverwaltungsproblem

Im Wesentlichen erstellen/zerstören ich UIImage viele Male.
Selbst wenn ich mit dem lokalen NSAutoreleasePool die Speicherauslastung zu einem niedrigen Zeitpunkt reduziere, beschwert sich das iphone/ipad-Gerät über die Speichernutzung.

Ich denke, ich sollte UIImage bestimmten Speicherpuffer (oder Pool von Puffer) zuweisen, die ich bezeichnen kann.
Ist das möglich?

Oder einen anderen Vorschlag, wie UImages viele Male erstellen/zerstören, ohne iOS zu stören würde sehr geschätzt werden.

Vielen Dank.

Antwort

10

Es ist keine allgemein bekannte Tatsache, aber Instruments berücksichtigt nicht die Größe von UIImages innerhalb des zugewiesenen Speichers. Sie könnten 100 MB von UIImages undicht sein und die zugewiesene Erinnerung würde die Geschichte nicht erzählen. Was erzählt die Geschichte ist die Anzahl der Live UIImage Instanzen zu einem bestimmten Zeitpunkt.

In dem Zuordnungen Instrument, mit dem oberen rechten Suchfeld nach "Bild" suchen. Dann suchen Sie nach der Spalte mit der Bezeichnung #lining in UIImage. Diese Anzahl ist die Anzahl der UIImage-Objekte. Das ist ein besserer Kompass, um herauszufinden, wohin eure UIImagien gehen. Wenn Sie zu einem bestimmten Zeitpunkt mehr Objekte haben, als Sie erwarten, und die UImagages von thease nicht verschwinden, liegt ein UIImage-Leck in Ihren Händen. Ein UIImage-Leck wird Ihre App schnell umbringen.

+0

wow schöne Infos, aber leider, meine #living UIImage nicht über meine Erwartungen. :(jeder andere Vorschlag?, und alle anderen einschließlich #CGImage schwankt nicht mehr als ich denke (max 6+) .. ähm vielleicht 6+ = 6mg und Baseline 10mg = 16Mg löste die Warnung. – eugene

+0

Ich habe frisches sauberes ipad mit weniger als 4.0 iOS (ohne Hintergrund App-Fähigkeit). Obwohl die Leute sagten, 16MG ist genug, um eine Warnung zu generieren, 16mg scheint mir immer noch zu niedrig.Ich muss sicherstellen, dass es nicht Speicher Fragmentierung Problem durch Senkung der Grundlinie ist Speicherverbrauch etwas mehr – eugene

+0

Warnungen sind nicht unbedingt ein Grund zur Sorge - sie können und werden von Apples eigenen Anwendungen (insbesondere der App Maps auf Retina-Displays) ziemlich regelmäßig erzeugt, was Ihre App als Reaktion auf eine Speicherwarnung tut das ist wichtig, nicht, ob man ausgelöst wird – lxt

2

CGImage schwankt nicht mehr, als ich denke, (max 6 +) .. umm vielleicht 6+ = 6 mg und 10 mg = Baseline 16mg die Warnung

CGImages Autoreleased werden nicht ausgelöst, sollten Sie anrufen CGImageRelease(image);