【发布时间】:2014-04-05 14:01:32
【问题描述】:
我有一个函数可以将UIImage 转换为vImage(用于iOS 的Accelerate.framework 中的一些vImage 方法。
我的方法是:
-(vImage_Buffer)convertImage:(UIImage *)image {
CGImageRef sourceRef = [image CGImage];
NSUInteger sourceWidth = CGImageGetWidth(sourceRef);
NSUInteger sourceHeight = CGImageGetHeight(sourceRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *sourceData = (unsigned char*)calloc(sourceHeight * sourceWidth * 4, sizeof(unsigned char));
NSUInteger bytesPerPixel = 4;
NSUInteger sourceBytesPerRow = bytesPerPixel * sourceWidth;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(sourceData, sourceWidth, sourceHeight,
bitsPerComponent, sourceBytesPerRow, colorSpace,
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, sourceWidth, sourceHeight), sourceRef);
CGContextRelease(context);
vImage_Buffer v_image = {
.data = sourceData,
.height = sourceHeight,
.width = sourceWidth,
.rowBytes = sourceBytesPerRow
};
return v_image;
}
我通过在网络上混合和匹配一些代码 sn-ps 来构建它。
我的问题是,我有一个calloc 调用,它为sourceData 分配空间。但是如何以及在哪里释放这些内存?
鉴于我可能会多次调用此方法,看起来像原样,会有巨大的内存泄漏。我不认为我会在这里发布它,因为它为我的vImage_Buffer 变量提供了支持.data。但是我会在我的调用函数中释放它吗?或者将v_image 设置为nil(或在调用方法中命名的任何返回变量)最终会释放calloc 行分配的内存?
有人指点一下吗?
【问题讨论】:
标签: ios iphone objective-c uiimage accelerate-framework