Я написал метод загрузки изображения в CALayer. Это код:Сборщик мусора и основной фонд
- (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;
}
Я использую этот метод в моем CALayer:
NSString *pathString = // my image path;
aLayer = [CALayer layer];
aLayer.contents = [self loadImage:pathString];
Это работа. Я завершаю просмотр (используя сборщик мусора), но у моего приложения есть утечки. Должен ли я выпускать CFDataRef imgData? Я читал, что сборщик мусора не работает в Core Foundation.
Спасибо и извините мой английский.
Во-первых, спасибо за ваш ответ. Как я должен написать метод завершения? будет ли этот код правильным: CGImageRelease (aLayer.content); aLayer = nil – Fernando
Содержимое сохраняется слоем, поэтому вы можете освободить его сразу после назначения aLayer.contents. Имейте в виду, что вы не должны использовать имя, подобное loadImage, но вместо createImage, поскольку вы являетесь владельцем возвращаемого изображения (см. Руководство по программированию памяти для Core Foundation). –
спасибо !! Я попробую. – Fernando