Jetez un oeil à cela, il parle de redimensionner les images et ainsi de suite correctement:
https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more
Son un grand tutoriel sur FAQ sur UIImagePickerController, UIImage, mémoire et plus.
EDIT:
avertissements de mémoire sont extrêmement fréquentes lorsqu'ils traitent avec le UIImagePickerController. Cela est particulièrement vrai lors de l'utilisation de l'appareil photo. Gardez à l'esprit que si un fichier JPG ou PNG sur le disque ne peut contenir que quelques Mo, le bitmap mémoire non compressé utilisé pour dessiner l'image utilise considérablement plus.
Il n'y a rien que vous faites mal nécessairement, mais certaines améliorations peuvent être apportées:
Plutôt que de stocker les octets d'images dans Core Data, pourquoi ne pas écrire l'image sur le disque et stocker le chemin d'accès au fichier votre base de données? Si vous utilisez la libération automatique, plutôt que d'utiliser autant d'images auto-libérées, pouvez-vous trouver un moyen de gérer directement leur cycle de vie et de le libérer plus rapidement? La meilleure solution consiste peut-être à écrire les images sur disque le plus rapidement possible après le traitement et à libérer la mémoire qu'elles utilisent. Puis stocker leur emplacement en utilisant les données de base plutôt que les données brutes. Ou même supprimer toutes les images chargées, stocker sur le disque, charger une nouvelle image, puis stocker sur le disque, puis charger les images via le chemin.
quelque chose comme ca.
vous pouvez modifier un code comme ceci: Getting crash after picking images from UIImagePickerController (Related to memory leak?)
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissModalViewControllerAnimated:YES];
if (object.imagePath != nil) {
[self deleteImages];
}
dispatch_queue_t image_queue;
image_queue = dispatch_queue_create("com.gordonfontenot.app", NULL);
dispatch_async(image_queue, ^{
NSDate *now = [NSDate date];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyyMMDDHHmmss"];
NSString *imageName = [NSString stringWithFormat:@"Image-%@-%i", [f stringFromDate:now], arc4random() % 100];
NSString *thumbName = [NSString stringWithFormat:@"%@-thumb", imageName];
[f release];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:imageName];
NSString *thumbPath = [documentsDirectory stringByAppendingPathComponent:thumbName];
NSData *thumbImageData = UIImagePNGRepresentation([UIImageManipulator scaleImage:[info objectForKey:@"UIImagePickerControllerEditedImage"] toSize:CGSizeMake(120, 120)]);
[thumbImageData writeToFile:thumbPath atomically:NO];
dispatch_async(dispatch_get_main_queue(), ^{
object.thumbPath = thumbPath;
[self setupImageButton];
imageButton.enabled = NO;
[self setupChooseImageButton];
});
NSData *fullImageData = UIImagePNGRepresentation([UIImageManipulator scaleImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"] toSize:CGSizeMake(800, 600)]);
[fullImageData writeToFile:fullPath atomically:NO];
dispatch_async(dispatch_get_main_queue(), ^{
imageButton.enabled = YES;
object.imagePath = fullPath;
});
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum([info objectForKey:@"UIImagePickerControllerOriginalImage"], self, nil, nil);
}
});
dispatch_release(image_queue);
}
Espérons que vous avez suffisamment d'informations pour aller d'ici.
PK
obtenir un iPhone 4.gentil: D je pourrais avoir besoin de m'en procurer un. – Pavan
Savez-vous si cela est en quelque sorte la faute de l'UIImagePicker lui-même ou si c'est directement en raison de la taille de l'image? –
@stefan_g, C'est une fonction de l'image que UIImagePicker charge, mais il n'y a aucun moyen de l'empêcher de charger une image gigantesque s'il le souhaite. Tirer des images de l'appareil photo est une entreprise encombrante aussi ... La meilleure politique est de se faufiler autant que possible. –