UIImagePickerController Speicherleck

8

Ich sehe einen großen Speicherverlust, wenn ich UIImagePickerController in meiner iPhone App verwende. Ich verwende Standardcode aus den Apple-Dokumenten, um das Steuerelement zu implementieren:

%Vor%

Und für den Abbruch:

%Vor%

Der Rückruf von didFinishPickingMediaWithInfo ist genauso normal, obwohl ich nicht einmal irgendetwas auswählen muss, um das Leck zu verursachen.

Hier ist, was ich in Instrumenten sehe, wenn ich nur die UIImagePickerController öffne, die Foto-Bibliothek wähle und wiederholt Cancel drücke. Wie Sie sehen können, wächst die Speicherkapazität, und dies führt schließlich dazu, dass sich meine iPhone-App enorm verlangsamt.

Wie Sie sehen können, habe ich den Bilderwähler 24 mal geöffnet, und jedesmal hat er 128kb mallokiert, was nie freigegeben wurde. Grundsätzlich werden 3mb meiner insgesamt 6mb nie veröffentlicht.

Diese Erinnerung bleibt durchgesickert, egal was ich mache. Auch nach dem Wegfahren vom Stromregler bleibt es gleich. Ich habe auch das Picker Control als Singleton mit den gleichen Ergebnissen implementiert.

Hier ist, was ich sehe, wenn ich in diese zwei Zeilen eindringe:

Jede Hilfe hier würde sehr geschätzt werden! Auch hier muss ich nicht einmal ein Bild wählen. Ich stelle nur den Controller vor und drücke Abbrechen.

Update 1

Ich habe apples Beispiel für die Verwendung von UIIMagePickerController heruntergeladen und ausgeführt, und ich sehe das gleiche Leck dort, wenn Instrumente laufen (sowohl im Simulator als auch auf dem Telefon).

Ссылка

Alles, was Sie tun müssen, ist die Fotobibliothek-Taste zu drücken und die Taste "Abbrechen" immer wieder zu drücken. Der Speicher wird immer größer.

Irgendwelche Ideen?

Update 2

Ich sehe dieses Problem nur beim Betrachten der Fotobibliothek. Ich kann wählen, Foto zu nehmen, und öffne und schließe das immer wieder, ohne ein Leck.

    
Watson 01.07.2011, 23:52
quelle

5 Antworten

5

Es ist ein Fehler im SDK. Einen Bericht mit Apple einreichen. Ich habe die samme isue. Es ist auch hier dokumentiert: Ссылка und das war vor über einem Jahr und immer noch keine Lösung.

    
Åke Gregertsen 05.07.2011 01:50
quelle
1

Einige unserer Apps verwenden den gleichen UIImagePickerController aufgrund eines Lecks in 2.x (ich fühle mich alt ...). Ich hatte den Eindruck, dass das Leck behoben wurde, aber ich könnte falsch liegen.

Es ist ein etwas schrecklicher Workaround, aber manchmal ist das das Beste, was Sie tun können.

    
tc. 02.07.2011 00:30
quelle
0

Versuchen Sie, UIImagePickerController.delegate auf nil vor der Freigabe zu setzen.

%Vor%     
Till 02.07.2011 00:12
quelle
0

Der "Mark Heap" -Button in Instruments war für mich der absolut beste Weg, diese Art von Problemen aufzuspüren.

Dies ist ein OK Artikel zur Verwendung: Ссылка

Aber es wird Ihnen sicher sagen, welche Objekte länger überleben, als Sie erwarten ... und letztendlich, was die Quelle des Problems ist.

Sie können auch eine vollständige Retain / Release-Kurve für jedes einzelne Objekt sehen, das überlebt hat. So können Sie genau feststellen, wo sich Ihr Problem befindet.

BEARBEITEN: Ich benutze auch einen UIImagePickerControllers, und ich kann versprechen, dass er (auf lesate für mich) nicht leckt, wie du es vorschlägst - also, was auch immer passiert, es ist fast sicher reparierbar.

    
Steve 02.07.2011 00:46
quelle
0

Ich habe UIImagePickerController verwendet und nach 40 Bildern habe meine Anwendung eine DidMemoryWarning Nachricht erhalten und gestoppt, alle meine Ansichten ausgeblendet.

In meiner Anwendung erstelle ich 40 Objekte von

%Vor%

Um richtig zu arbeiten, erstelle ich eine eindeutige Instanz, die für alle Anwendungen freigegeben ist und damit funktionieren alle korrekt.

Ich behaupte, dass die Kontrolle auch die Erinnerung verloren hat, aber nur einmal. Meine Anwendung kann Bilder von der Kamera korrekt aufnehmen:

%Vor%     
Joaquin Blasco 18.12.2012 10:57
quelle