Mon application iPhone télécharge des fichiers image à partir d'un serveur, les stocke dans NSTemporaryDirectory(), puis charge l'image dans l'interface utilisateur de manière asynchrone. Le flux de code est comme suit:Fuite de mémoire UIGraphicsGetImageFromCurrentImageContext pour la mise à l'échelle de l'image
- Afficher la vue avec indicateur d'activité de chargement et exécuter un téléchargeur d'image en arrière-plan.
- Une fois l'image téléchargée, elle est écrite dans un fichier.
- Une minuterie dans la vue de chargement vérifie la disponibilité du fichier dans le répertoire temporaire et, une fois disponible, charge l'image à partir du fichier et ajoute l'image à l'interface utilisateur.
- Avant d'ajouter l'image, elle est redimensionnée à la taille requise.
Le problème est, j'utilise UIGraphicsGetImageFromCurrentImageContext pour mettre à l'échelle l'image. On dirait que la mémoire utilisée par le contexte de l'image n'est pas nettoyée. La mémoire de l'application ne cesse d'augmenter à mesure que plus de fichiers sont téléchargés.
Une partie du code ci-dessous:
code à l'échelle de l'image:
-(UIImage*)scaleToSize:(CGSize)size image:(UIImage *)imageref
{
UIGraphicsBeginImageContext(size);
[imageref drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
image Chargement du répertoire temporaire:
-(void)loadImageFromFile: (NSString *) path
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
UIImage * imm = [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
[self performSelectorOnMainThread:@selector(insertImage:) withObject:imm waitUntilDone:YES];
[pool release];
}
Ajout image pour (sous-ensemble de code):
self.imageContainer = [[UIImageView alloc] initWithFrame:CGRectMake(0,80,320,250)];
[self addSubview:self.imageContainer];
self.imageContainer.image = [self scaleToSize:CGSizeMake(320.0f, 250.0f) image:imm];
[imageContainer release];
Que manque-t-il ici?
-vous enlever les sous-vues aussi bien? Combien de mémoire pensez-vous fuyez-vous? Peut-être que le chargement du web est votre problème? Qu'est-ce qui vous fait penser que la mise à l'échelle est votre problème? – Eiko
Merci pour votre réponse. Une enquête plus approfondie a révélé que la mise à l'échelle n'est pas le vrai problème. C'était l'instance d'image de l'interface utilisateur qui n'était pas nettoyée. Une idée de pourquoi cela pourrait être le cas? – KSH
Avez-vous déjà trouvé une solution à ce problème? J'ai actuellement le même problème: 'UIImage' créé avec' UIGraphicsGetImageFromCurrentImageContext() 'est une fuite de mémoire. – MusiGenesis