Утечка памяти с NSData - PullRequest
0 голосов
/ 01 мая 2010

У меня утечка с этим кодом, но я не могу найти, откуда он взялся. Эта функция вызывается в пуле автоматического выпуска. Я освобождаю аргумент IplImage * image.

Когда я запускаю инструмент ObjAlloc, он сообщает мне, что «NSData * data» протекает. Если я пытаюсь вручную выпустить UIImage, возвращенный этой функцией, я получаю ошибку EXC_BAD_ACCESS, вероятно, потому что этот UIImage автоматически выпущен.

Я немного растерялся, любой намек был бы признателен.

Спасибо!

UIImage *UIImageFromIplImage(IplImage *image)
    {
 NSLog(@"IplImage (%d, %d) %d bits by %d channels, %d bytes/row %s", image->width, image->height, image->depth, image->nChannels, image->widthStep, image->channelSeq);

 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
 NSData *data = [NSData dataWithBytes:image->imageData length:image->imageSize];
 CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
 CGImageRef imageRef = CGImageCreate(image->width, image->height,
          image->depth, image->depth * image->nChannels, image->widthStep,
          colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,
          provider, NULL, false, kCGRenderingIntentDefault);
 UIImage *ret = [UIImage imageWithCGImage:imageRef];
 CGImageRelease(imageRef);
 CGDataProviderRelease(provider);
 CGColorSpaceRelease(colorSpace);
 return ret;
    }

Ответы [ 2 ]

1 голос
/ 01 мая 2010

Код выглядит хорошо для меня. Может быть, вы могли бы попытаться проверить, является ли это настоящей утечкой, скажем, запустив код в цикле, чтобы увидеть, увеличивается ли использование памяти?

0 голосов
/ 01 мая 2010

Спасибо за ваши ответы. С вами все в порядке, и этот конкретный код не пропускает.

Причиной утечки является то, что этот возвращаемый UIImage был установлен как этот образ UIImageView. Однако я не выпустил этот UIImageView, потому что я думал, что, поскольку он был загружен из пера, он будет выпущен автоматически.

Может быть причина в том, что у меня установлено свойство для сохранения для этого UIImageView?

@property (nonatomic, retain) UIImageView* imageView;

Должен ли я иметь свойство для объектов, созданных из файла пера?

Спасибо!

...