Сборщик мусора и основной фонд
Я написал метод для загрузки изображения в 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.
Спасибо и извините за мой английский.
2 ответа
Вы несете ответственность за освобождение этого объекта, вызывая CGImageRelease.
Смотрите документацию по сборке мусора:
Следовательно, по умолчанию в среде со сборщиком мусора вы управляете объектами Core Foundation точно так же, как в среде с подсчетом ссылок (как описано в Руководстве по программированию управления памятью для Core Foundation > "Политика владения"). Если вы создаете или копируете объект Core Foundation, вы должны впоследствии отпустить его, когда закончите с ним. Если вы хотите сохранить объект Core Foundation, вы должны сохранить его и затем снова отпустить, когда закончите с ним.
Сборщик мусора работает с типами CoreFoundation.
см. CFMakeCollectable (выдержка из документов CF):
CFTypeRef CFMakeCollectable (CFTypeRef cf);
Делает недавно выделенный объект Core Foundation подходящим для сборки мусора.
параметры
cf
Объект CFType, чтобы сделать коллекционным. Это значение не должно быть NULL. Возвращаемое значениеcf
,Обсуждение Для получения более подробной информации см. Руководство по программированию сборки мусора.