2009-12-02 7 views
14

Je me suis référé à cette très bonne référence: https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more mais j'ai de sérieux problèmes. Après avoir pris une photo, je reçois un avertissement de mémoire. C'est pour la première photo que je prends, pas la deuxième ou la troisième.Avertissement de mémoire après avoir utilisé le UIImagePicker une fois

Je me demandais si c'est parce que j'ai quelques jpegs chargés à partir du répertoire de l'application dans les vues défilantes. La seule solution que je peux penser est de décharger tout dans ma vue principale pendant que le UIImagePicker est actif, et recharger tout à nouveau par la suite, mais je ne suis pas sûr que c'est la bonne solution et je ne sais pas comment faire.

Est-ce que le UIImagePicker utilise que beaucoup de mémoire? Je n'ai même pas encore traité ou affiché l'image qu'il faut encore. Je reçois un avertissement de mémoire, même si je rejette l'image.

Toute aide appréciée.

Répondre

9

Oui, cela arrive. La chose à retenir est qu'il est acceptable d'obtenir un avertissement de mémoire, cela ne signifie pas que vous êtes une mauvaise personne, vous devez juste vous assurer que votre application ne plante pas ou ne se confond pas en réponse à l'avertissement de la mémoire.

En particulier, vous devez comprendre que l'action par défaut de UIViewController est de décharger ses vues si elles ne sont pas visibles, et elles ne seront pas visibles si le sélecteur d'image en plein écran est affiché.

+0

Bon, si je comprends bien, je n'ai pas besoin de cacher ma vue pendant que le UIImagePicker est affiché, comme le contrôleur de vue le fait déjà, et que je suis autorisé à recevoir un avertissement de mémoire après une image. tant que je ne fais rien d'exotique (tel que l'affichage d'une image en pleine résolution?) –

+0

si votre application utilise "trop" de mémoire, et ne libère pas "assez" de celui-ci lorsque vous recevez un avertissement de faible mémoire, le système d'exploitation peut potentiellement tuer l'application. il n'y a pas de valeurs exactes pour autant que je sache "assez" et "trop". –

+0

De cette réponse (http: // stackoverflow.com/questions/457568/iphone-développement-mémoire-limite-pour-iphone-application/457730 # 457730) il semble que vous obtenez l'avertissement à environ 22 Mo d'utilisation. Bien qu'Apple ne l'ait pas officiellement confirmé. –

1

Très probablement, vous utilisez des images uneditted, et ils reviennent à pleine taille soufflée de 1400x1300 ce qui est énorme et accident mal avec votre application, je vous suggère de redimensionner les images à la résolution native de l'iPhone 320x480, devrait résoudre votre problème

+1

Salut, Les images I L'affichage est beaucoup plus petit que cela, et je reçois l'avertissement de la mémoire après que l'appareil photo ait pris la photo et avant que j'aie une chance de redimensionner l'image, donc je ne suis pas sûr que ce soit le problème. –

+0

Oui, il semble que vous pourriez avoir d'autres fuites de mémoire quelque part t ici – Daniel

+0

de sorte que vous prenez la photo et même avant que vous puissiez le sélectionner son c rashing? – Daniel

45

Pour toutes les personnes qui sont toujours à la recherche de la réponse réelle et pas une déclaration vague, alors regardez ici. J'ai remarqué qu'il y a des centaines de réponses telles que "Manipulez votre mémoire" mais cela ne répond à rien. Espérons que cela aide quelqu'un d'autre là-bas ...

Modifier les éléments suivants

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

Pour ce qui suit si votre point de vue modal congédie avant de l'image ...

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

C'est vraiment une bonne idée. Quand j'ai débogué, j'ai bien saisi les images, mais mon imageView me manquait. Mais rejeter la vue modale tôt, travailler comme le charme. Merci! 1 jusqu'à! – karim

+0

Alors, pourquoi cela fonctionne-t-il? –