je le code suivant:CGImage/UIImage fuite
...
UIImage *image;
CGImageRef imageRef;
image = [[[UIImage alloc] initWithContentsOfFile: filePath] retain];
while (some_condition)
{
NSAutoreleasePool *pool = [[NSAutoReleasePool alloc] init];
imageCGDATA = CGDataProviderCreateWithCFData(cfdata);
imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, imageCGDATA, NULL, NO, intent);
CGDataProviderRelease(imageCGDATA);
[image release];
image = [[[UIImage alloc] initWithCGImage: imageRef]] retain]; // LEAK HERE
CGImageRelease(imageRef);
[pool release];
}
...
Quand je lance le code et regarde les allocations Je vois au total « Bytes Live » grandir en tant que chaque itération de la boucle est terminée, et le nombre de " CGImage "et" UIImage "Les allocations de vie deviennent très importantes (cela dépend évidemment du nombre d'itérations de la boucle).
Si je commente la ligne de code annotée avec "LEAK HERE" (et la version qui précède immédiatement cette ligne de code) et relancer l'application, alors "Live Bytes", nombre de "CGImage" et "UIImage" Les allocations de vie restent statiques sur de nombreuses itérations de la boucle.
Pourquoi ce code fuit-il? Qu'est-ce que je rate?
Merci.
Merci! Je ne peux pas croire que j'ai raté ça - je suis nouveau à Objective-C et j'ai glissé tout droit dessus ... – JeffR