Frage

uiimagepickerview Controller Speicherlecks in iphone zu schaffen - warum

Versuchen Sie ui Bild-Picker-View-Controller in Ihrer Anwendung & debug, sie umzusetzen. Sie werden Speicherlecks in Ihrer Anwendung finden. Warum ui Bild-Picker-View-Controller erzeugt Speicherlecks.


-(void)addPhotos:(id)sender
{
    if(imagePickerController==nil){ 
          imagePickerController=[[UIImagePickerController alloc]init];
          imagePickerController.delegate=self;
          imagePickerController.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        imagePickerController.allowsImageEditing=YES;
          imagePickerController.navigationBar.barStyle=UIBarStyleBlackOpaque;
    }
[self.navigationController presentModalViewController:imagePickerController animated:YES];
}

dealloc meiner Ansicht-Controller.


- (void)dealloc {
if(PhotoDateArray!=nil)[PhotoDateArray release];
if(imagePickerController!=nil) [imagePickerController release];
if(objDetail!=nil) [objDetail release];
if(Picimage!=nil) [Picimage release];
if(mySavePhotoController!=nil) [mySavePhotoController release];
if(LoadingAlert!=nil);
[super dealloc];
}

Video Link zu erklären, wie ich das Speicherleck in ihm immer bin ..

http://www.yourfilelink.com/get.php?fid=508534

War es hilfreich?

Lösung

Auch wenn Sie den Null-Check haben, ist es immer noch möglich, Speicher zu verlieren. Ich denke, was hier passiert ist, dass Sie alloc / init mehrmals anrufen, aber nur einmal freigegeben wird. Mein es erraten, dass addPhoto: bis zu einem gewissen Knopf klicken verdrahtet ist, würde dealloc nur einmal aufgerufen werden, wenn die Delegierten zu zerstören versucht. Dies schafft eine Situation wie folgt aus:

  • Schaltfläche klicken
    • alloc / init
  • Schaltfläche klicken
    • alloc / init (Speicherverlust auf dem ersten alloc'd Kommissionierer)
  • Fenster schliessen
    • dealloc (freie zweite alloc'd Kommissionierer)

Eine bessere Art und Weise könnte der Weg sein Apple-in der PhotoLocations und iPhoneCoreDataRecipes Beispiele:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
[self presentModalViewController:imagePicker animated:YES];
[imagePicker release];

hören dann für die didFinishPickingImage und imagePickerControllerDidCancel Nachrichten an Ihre Delegierten und einen Anruf in beiden Orten [self dismissModalViewControllerAnimated:YES]; sollte ausreichen.

Andere Tipps

ich nicht über den Rest des Codes kennen, aber haben Sie schon einmal ein Release?

[imagePickerController release]

UIImagePickerController lädt und initialisiert PhotoLibrary.framework zum ersten Mal gezeigt wird. Dieser Speicher wird nicht freigegeben werden, bis die Anwendung geschlossen wird.

(der Code, den Sie erscheint nicht gebucht Lecks zu haben, wie sie ist, aber das bedeutet es nicht, nicht mit dem Rest der Anwendung in einer Art und Weise interagieren, die sie verursacht)

Das kann ich erklären, weil ich das gleiche Problem hatte.

Sie testen nicht-Speicher auf dem Simulator! Wenn Sie den Apfel Code auf einem Gerät testen, das Speicherproblem verschwindet.

Ich war mit einem Speicher alloc Leck, das ich in Instrumenten gefunden. Alles, was ich tat, war das Öffnen und Schließen des Bild Picker (offen / cancel) und mit Apple-Code, meinen Code und Code der anderen Leute, so wie ich oben.

Alle wurden die Zuordnung zeigt und bis jeder Zeit gehen, als ob der Kommissionierer nicht freigegeben wurde. Wenn Sie versucht haben, um sie zu lösen, wäre es zum Absturz bringen (über freigegeben).

Dann fand ich eine wirklich hilfreich Webseite, die im Grunde gesagt:

„Dies geschieht nicht, wenn auf dem Gerät testen“

Also wechselte ich vom Simulator und lief die Tests auf dem Gerät. Lo & siehe, da keine Zuordnung Anstieg war und es verhielt sich normal.

Dies ist jedoch völlig böse und jetzt können wir kein Vertrauen in den Simulator setzen eine zuverlässige Arbeit zu tun.

Das möchte ich hinzufügen, Menschen zu retten, die Zeit, Schmerz und Verwirrung des Staunens wtf los ist!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top