contrôleur de uiimagepickerview créer des fuites de mémoire dans l'iPhone - pourquoi?

StackOverflow https://stackoverflow.com/questions/1447367

  •  11-09-2019
  •  | 
  •  

Question

contrôleur de uiimagepickerview créer des fuites de mémoire dans l'iPhone - pourquoi

Essayez de mettre en œuvre contrôleur de vue de sélecteur d'image ui dans votre application et déboguer. Vous trouverez des fuites de mémoire dans votre application. Pourquoi contrôleur de vue de sélecteur d'image crée ui des fuites de mémoire.


-(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 de mon contrôleur de vue.


- (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];
}

lien vidéo expliquant comment je reçois la fuite de mémoire en elle ..

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

Était-ce utile?

La solution

Même si vous avez le chèque nul, il est encore possible de fuite de mémoire. Je pense que ce qui se passe ici est que vous appelez alloc / plusieurs fois d'initialisation, mais seulement une fois la libération. Je pense que ce addPhoto: est câblé à appuyer sur un bouton clic, dealloc ne sera appelée une fois lorsque le délégué essaie de détruire. Cela crée une situation comme celle-ci:

    bouton
  • cliquez sur
    • alloc / init
  • bouton
  • cliquez sur
    • alloc / init (fuite de mémoire sur le premier sélecteur de alloc'd)
  • Fermer la fenêtre
    • dealloc (sélecteur de deuxième alloc'd libre)

Une meilleure façon peut-être la manière dont Apple il fait dans le PhotoLocations et iPhoneCoreDataRecipes exemples:

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

Alors écoutez les messages didFinishPickingImage et imagePickerControllerDidCancel à votre délégué et un appel à [self dismissModalViewControllerAnimated:YES]; dans les deux endroits devraient suffire.

Autres conseils

Je ne sais pas sur le reste du code, mais avez-vous jamais communiqué?

[imagePickerController release]

charges UIImagePickerController et initialise la première fois PhotoLibrary.framework il apparaît. Cette mémoire ne sera pas récupéré jusqu'à ce que votre application est fermée.

(le code affiché ne semble pas avoir des fuites en l'état, mais cela ne signifie pas qu'il ne sera pas interagir avec le reste de votre demande d'une manière qui leur cause)

Je peux expliquer cela parce que je le même problème.

Ne pas tester la mémoire sur le simulateur! Si vous testez le code de pomme sur un appareil, le problème de mémoire disparaît.

J'avais une fuite de mémoire alloc que j'ai trouvé dans Instruments. Tout ce que je faisais était ouvrir et fermer le sélecteur d'image (ouvert / annuler) et en utilisant le code d'Apple, mon code et tout autre code populaire, tout comme le vôtre ci-dessus.

Tous ont été REPARTITION à monter et à chaque fois, comme si le sélecteur n'a pas été libérée. Si vous avez essayé de le libérer, il plantait (plus sorti).

Je trouve une page web très utile qui essentiellement a déclaré:

« Cela ne se produit pas lors du test sur l'appareil »

Je passe du simulateur et conduit les tests sur l'appareil. Lo & Voici, il n'y avait pas d'augmentation de l'allocation et il se comportait normalement.

Ceci est cependant tout à fait le mal et maintenant nous pouvons placer aucune confiance dans le simulateur pour faire un travail fiable.

Je veux ajouter à sauver les gens, le temps, la douleur et la confusion de se demander wtf se passe!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top