2009-10-07 12 views
3

J'ai recherché sur Google le problème de mémoire associé à UIImage et j'ai rencontré plusieurs threads qui parlaient du problème, mais pas vraiment d'aide ou de solution. Je sais que lorsque nous utilisons -imageNamed: l'objet est en cache, il est donc préférable d'utiliser initWithData:. Lorsque nous utilisons drawRect: et UIGraphicsGetImageFromCurrentImageContext(), l'image est-elle mise en cache?UIImage Problèmes de mémoire liés à la mise en cache

également dans le code suivant:

CGImageRef tmp = CGImageCreateWithImageInRect(imageToCrop.CGImage, clippedRect); //pull the image from our cropped context UIImage *cropped = [UIImage imageWithCGImage:tmp];//UIGraphicsGetImageFromCurrentImageContext(); 
CGImageRelease(tmp); 

est-cache se déroule bien qu'il n'y ait pas de référence à ce sujet dans la documentation? Comment libérons-nous la mémoire qui est consommée par le cache?

+0

Je voudrais savoir à ce sujet aussi. J'ai un fond UIImageView que je défile en appuyant sur un bouton, où avec chaque bouton, il définit une autre image en utilisant [UIImage imageNamed: ...], et les allocations Live Bytes continuent à augmenter. Comment gérer cela correctement? – GeneCode

Répondre

0

Je ne suis pas sûr de la réponse à votre première question, mais en ce qui concerne la deuxième question, vous devriez noter que lorsque vous accédez à la propriété CGImage de l'UIImage, l'image entière est chargée en mémoire. Ceci est référencé dans le documentation for the CGImage property.

Si vous avez terminé avec l'image après utilisation, vous pouvez simplement appeler la méthode de libération sur l'UIImage afin de libérer la mémoire. Si vous voulez le conserver mais le retirer du cache, je ne peux pas penser à autre chose que d'écrire l'image sur le disque, puis de le créer et de créer une nouvelle image en utilisant -initWithData: