2017-10-05 5 views
1

En utilisant UIImagePickerController pour capturer des images, je rencontre des problèmes de mémoire. Mon cas d'utilisation m'oblige à capturer jusqu'à 10 images à la fois et lorsque l'utilisateur clique sur le bouton terminé présent dans la superposition de caméra, les images doivent être envoyées au serveur et affichées en même temps dans CollectionView sur le rejet de l'instance UIImagePickerController .avertissement de mémoire UIImagePickerController

Lors de la capture de la 10ème image, je supprime manuellement le sélecteur et envoie les images au serveur et les affiche dans la vue de collection. Comme j'ai un certain nombre de seuils d'images, j'utilise array pour conserver les images et je vide le tableau à chaque fois que l'on clique sur le bouton 'Done' ou que l'utilisateur capture les 10èmes images.

J'ai d'abord pensé, j'ai rencontré des problèmes de mémoire à cause de la collection afficher des images qui ne sont pas redimensionnées et donc j'ai redimensionné l'image et affiché dans le collectionView. Puis, après googling, j'ai lu que des fuites de mémoire pouvaient se produire lors du redimensionnement de l'image et je l'ai corrigé mais j'ai toujours des problèmes de mémoire et à chaque fois le même nombre d'images environ 45e (Capture de 10 images 4 fois et puis obtenir l'avertissement de mémoire et le crash après avoir capturé environ 5 images dans la 5ème fois dans iPad4). Ensuite, j'ai commenté tout mon code dans didFinishPickingMediaWithInfo et mon application ne fait aucun traitement, sauf juste capturer l'image et encore je reçois un avertissement de la mémoire autour de la 45ème image.

Je ne sais pas quel est le problème. Est-ce que UIImagePickerController met en cache les images qu'il capture ou quelque chose comme ça?

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    //All code in this section is commented out and no processing is done in any part of the code with the images captured. 
} 
+0

se produisent dans deux types -> 1. votre imagesize est lourd 2. mémoire de votre appareil est faible –

+0

la chose est que je veux savoir comment l'avertissement de mémoire est provoquée. Si je ne fais que capturer l'image sans rien faire, comment pourrais-je me retrouver avec un avertissement de mémoire? Je n'écris pas l'image capturée à n'importe quel emplacement de mémoire et je ne traite même pas l'image comme la redimensionner. Capturez simplement continuellement l'image et ne faites rien dans didFinishPickingMediaWithInfo. –

+0

Je pense que le problème ne vient pas de la taille de l'image ou du fichier, mais il y a un cycle de rétention dans votre code. Cela se produit quand il y a 2 objets ou plus qui contiennent la même référence. – RoccoBerry

Répondre