3 votes

Xcode Analyseur statique rapporte une fuite sous ARC - CFImageRef - comment résoudre

Sur les quelque 2 000 lignes de code, le Static Analyser n'a qu'un seul problème, ainsi :

spellDetailModalViewController  *detailVC = [[spellDetailModalViewController alloc]init];
UIImage *tempImage = self.spellImageView.image;
CGRect newSize = CGRectMake(0.0, 0.0, 320.0, 305.0);
CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize);
UIImage *passingImage = [UIImage imageWithCGImage:temp];
temp=nil;

Il se plaint que CGImageRef 'temp' est potentiellement en fuite, et a un compteur de rétention de +1. Je le définis sur nil après que l'image a été transmise au ViewController modal. Évidemment, sous ARC, je ne peux pas appeler [temp release] sous ARC. Je ne sais pas quoi faire. Aide grandement appréciée.

4voto

Zaph Points 40557

Vous devez CGImageRelease temp

CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize);
UIImage *passingImage = [UIImage imageWithCGImage:temp];
CGImageRelease(temp);

À partir de la documentation d'Apple CGImageCreateWithImageInRect:

L'image résultante conserve une référence à l'image d'origine, ce qui signifie que vous pouvez libérer l'image d'origine après avoir appelé cette fonction.

0voto

Kemal Can Kaynak Points 150

CGImage est un objet Core Graphics et ARC ne peut pas gérer les bibliothèques de base. Vous devriez donc utiliser CGImageRelease ou une meilleure façon de passer cet avertissement, utilisez la méthode imageWithCIImage comme ceci ;

CIImage *fooImage = [CIImage imageWithCGImage:temp.CGImage];
UIImage *passingImage = [UIImage imageWithCIImage:fooImage];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X