J'ai écrit une méthode pour charger l'image dans CALayer. Voici le code:Garbage Collector et Core Foundation
- (CGImageRef)loadImage:(NSString*)path {
// Get data image
CGImageRef image = NULL;
NSData *data = [NSData dataWithContentsOfFile:path];
CFDataRef imgData = (CFDataRef)data;
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (imgData);
// Get CGImage from CFDataRef
image = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
// If the image isn't a JPG Image, would be PNG file
if (!image)
image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
return image;
}
J'utilise cette méthode dans mon CALayer:
NSString *pathString = // my image path;
aLayer = [CALayer layer];
aLayer.contents = [self loadImage:pathString];
C'est un travail. Je finalise ma vue (en utilisant garbage collector) mais mon application a des fuites. Devrais-je publier CFDataRef imgData? J'ai lu que garbage collector ne fonctionne pas dans Core Foundation.
Merci et excusez mon anglais.
D'abord, merci pour votre réponse. Comment je devrais écrire la méthode finalize? ce code serait-il correct?: CGImageRelease (aLayer.content); aLayer = nil – Fernando
Le contenu est conservé par le calque, vous pouvez donc le libérer immédiatement après l'affectation de aLayer.contents. Gardez à l'esprit que vous ne devriez pas utiliser un nom comme loadImage, mais plutôt createImage, comme vous possédez l'image qui est retournée (voir Guide de programmation de gestion de mémoire pour Core Foundation). –
Merci! Je l'essaye. – Fernando