J'écris une application qui utilise UIImagePickerController pour prendre plusieurs photos avec l'appareil aussi vite que iOS le permet. Mon application doit fonctionner sur iOS 3.13 sur toutes les versions du matériel iPhone (v1 à 4). J'utilise UIImagePickerController avec un cameraOverlayView.Comment puis-je vérifier s'il y a suffisamment de mémoire pour traiter une image capturée par UIImagePickerController lors de la prise de plusieurs photos avec l'appareil photo?
Ma question est, comment puis-je déterminer par programme combien de photos peuvent être traitées à la fois en fonction de la mémoire disponible? Voir ci-dessous pour plus de détails. Toute aide est appréciée!
Lorsque le délégué imagePicker reçoit imagePicker: didFinishPickingMediaWithInfo :, le délégué enregistre l'image en taille réelle dans le fichier PhotosAlbum enregistré avec UIImageWriteToSavedPhotosAlbum(). Une fois que j'ai résolu ce problème, l'application fera plus de choses avec l'image en taille réelle.
En tant que test, je prends des photos aussi vite que possible. Finalement, comme prévu, l'application reçoit un avertissement de la mémoire en raison du grand nombre de photos en mémoire tout en enregistrant dans l'album photo. Si j'ignore les avertissements de la mémoire et continue de prendre des photos, l'application est finalement détruite par iOS b/c.
Je n'ai aucun problème à fixer une limite au nombre de photos simultanées que j'autorise l'application à traiter à la fois. Chaque version iPhone HW a différentes capacités de mémoire et différentes résolutions de caméra. Avec iOS 4, le multitâche peut également affecter la mémoire disponible. Je préfère faire cela par programmation que de coder en dur une limite basée sur la version matérielle.
Une application de test qui montre ce comportement est à Source Code
J'ai résolu cela en utilisant les sous-classes NSOperationQueue et NSOperation pour gérer le traitement de l'image (l'op fait plus que simplement enregistrer dans l'album photo). La file d'attente est gérée en limitant le nombre d'opérations simultanées (basées sur iPhone HW), en interrompant la file d'attente sur les avertissements de la mémoire et en reprenant la file d'attente en l'absence d'opérations (sous-classe NSOperationQueue). Sur un iPhone v1, je peux prendre plus de 25 photos rapidement et l'application fonctionne très bien. Bien sûr, il faut beaucoup de temps pour terminer le traitement. – XJones