NSData的内存泄漏

时间:2010-05-01 05:18:24

标签: iphone memory-leaks nsdata

我在使用此代码时遇到了泄漏问题而无法找到它的来源。 在自动释放池中调用此函数。 我发布了IplImage *图像参数。

当我运行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 个答案:

答案 0 :(得分:1)

代码对我来说很好看。也许您可以尝试验证它是否是真正的泄漏,比如在循环中运行代码以查看内存使用量是否增加?

答案 1 :(得分:0)

感谢您的回答。你没事,这个特定的代码不会泄漏。

泄漏的原因是这个返回的UIImage被设置为UIImageView的这个图像。但是我没有发布这个UIImageView,因为我认为它是从笔尖加载的,它会自动释放。

原因可能是我为此UIImageView设置了一个属性设置?

@property (nonatomic, retain) UIImageView* imageView;

我是否应该为从nib文件创建的对象具有属性?

谢谢!