2009-12-02 6 views
14

Ich habe auf diese sehr gute Referenz verwiesen: https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more, aber ich habe einige sehr ernste Probleme. Nachdem ich ein Foto gemacht habe, erhalte ich eine Speicherwarnung. Dies ist für das erste Foto, das ich mache, nicht das zweite oder dritte.Speicherwarnung nach der Verwendung des UIImagePicker einmal

Ich frage mich, ob es ist, weil ich ein paar kleine jpegs aus dem Anwendungsverzeichnis in Scroll-Ansichten geladen habe. Die einzige Lösung, die ich mir vorstellen kann, ist, alles in meiner Hauptansicht zu entladen, während der UIImagePicker aktiv ist, und danach alles neu zu laden, aber ich bin mir nicht sicher, ob das die richtige Lösung ist und ich bin nicht sicher, wie das geht.

Verwendet der UIImagePicker so viel viel Speicher? Ich bin noch nicht einmal soweit, das Bild zu verarbeiten oder zu zeigen. Ich bekomme eine Erinnerungswarnung, auch wenn ich das Bild wegwerfe.

Jede Hilfe wird geschätzt.

Antwort

9

Ja, das passiert. Die Erinnerung ist, dass es in Ordnung ist, eine Gedächtniswarnung zu erhalten, das heißt nicht, dass Sie eine schlechte Person sind. Sie müssen lediglich sicherstellen, dass Ihre Anwendung nicht aufgrund der Speicherwarnung abstürzt oder verwirrt wird.

Insbesondere müssen Sie verstehen, dass die Standardaktion von UIViewController darin besteht, seine Ansichten zu entladen, wenn sie nicht sichtbar sind, und sie werden nicht sichtbar sein, wenn die Vollbild-Auswahl angezeigt wird.

+0

Richtig, wenn ich das richtig verstanden habe, muss ich meine Ansicht nicht verstecken, während der UIImagePicker angezeigt wird, da der View-Controller dies bereits tut, und dass ich eine Speicherwarnung bekommen darf, nachdem ein Bild aufgenommen wurde. solange ich nichts Exotisches mache (z. B. ein Bild mit voller Auflösung anzeigen?) –

+0

Wenn Ihre App "zu viel" Speicher verwendet und nicht "genug" davon freigibt, wenn Sie eine niedrige Speicherwarnung erhalten, Das Betriebssystem kann möglicherweise die App töten. Soweit ich weiß, gibt es keine genauen Werte für "genug" und "zu viel". –

+0

Aus dieser Antwort (http: // stackoverflow.com/questions/457568/iphone-entwicklung-memory-limitation-for-iphone-application/457730 # 457730) es scheint, dass Sie die Warnung bei ca. 22MB der Nutzung erhalten. Obwohl Apple es nicht offiziell bestätigt hat. –

1

Höchstwahrscheinlich werden Sie uneditted Bilder verwenden, und sie kommen wieder in voller geblasener Größe von 1400x1300, die sehr groß und w ird Absturz der App ist, schlage ich vor, die Bilder zur iphone nativen 320x480 Auflösung Ändern der Größe, soll Ihr Problem beheben

+1

Hallo, Die Bilder, die ich Ich bin viel kleiner als das, und ich bekomme die Speicherwarnung, nachdem die Kamera das Bild aufgenommen hat und bevor ich eine Chance habe, das Bild zu verkleinern, also bin ich mir nicht sicher, ob das das Problem ist. –

+0

yea es klingt, dass Sie andere Speicherlecks irgendwo hier – Daniel

+0

haben können, so dass Sie das Bild machen und sogar bevor Sie es wählen können, ist es c rashing? – Daniel

45

Für alle Leute, die immer noch nach der tatsächlichen Antwort und nicht nach einer vagen Aussage suchen, dann schauen Sie hier. Ich habe festgestellt, dass es Hunderte von Antworten gibt, wie "Behandle dein Gedächtnis", aber das beantwortet nichts. Hoffe, das hilft jemand anderes da draußen ...

Ändern der

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setImage:image]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

auf die folgenden folgenden so Ihre modal Ansicht entlässt vor Ihrer Bildeinstellung ...

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [self dismissModalViewControllerAnimated:YES]; 
    [imageView setImage:image]; 
} 
+0

Das ist wirklich eine gute Idee. Wenn ich debugge, habe ich die Bilder richtig gemacht, aber mein ImageView hat es vermisst. Aber Modal View früh entlassen, funktioniert wie Charme. Vielen Dank! 1 nach oben! – karim

+0

Warum funktioniert das? –