Сборщик мусора и основной фонд - PullRequest
0 голосов
/ 07 октября 2010

Я написал метод для загрузки изображения в 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 ]

3 голосов
/ 07 октября 2010

Вы несете ответственность за освобождение этого объекта, вызывая CGImageRelease.

См. Документацию по сбору мусора:

http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html

Следовательно, по умолчанию в среде со сборщиком мусора вы управляете объектами Core Foundation точно так же, как в среде с подсчетом ссылок (как описано в Руководстве по программированию управления памятью для Core Foundation> «Политика владения»). Если вы создаете или копируете объект Core Foundation, вы должны впоследствии отпустить его, когда закончите с ним. Если вы хотите сохранить объект Core Foundation, вы должны сохранить его и затем снова отпустить, когда закончили с ним.

2 голосов
/ 07 ноября 2010

сборщик мусора работает с типами CoreFoundation.

см. CFMakeCollectable (выдержка из документов CF):

CFTypeRef CFMakeCollectable (CFTypeRef ср);

Делает недавно выделенное ядро Фундаментный объект, пригодный для мусора коллекция.

Параметры cf Объект CFType для создания коллекционный. Это значение не должно быть НОЛЬ. Возвращаемое значение cf.

Обсуждение Подробнее см. Руководство по программированию сборки мусора.

...