【发布时间】:2013-09-27 07:59:21
【问题描述】:
我用这个函数来判断我的图片是否包含某种颜色的像素:
- (BOOL)imageHasOrange:(UIImage *)img
{
CGImageRef imageRef = img.CGImage;
NSData *data = (__bridge NSData *) CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
unsigned char *pixels = (unsigned char *)[data bytes];
BOOL hasColor = NO;
for(int i = 0; i < [data length]; i += 4)
{
if(pixels[i] == 255 && pixels[i+1] == 132 && pixels[i+2] == 0)
{
hasColor = YES;
break;
}
}
CFRelease(imageRef);
return hasColor;
}
当我使用 Instruments 跟踪内存泄漏时,它说它与 CGDataProviderCopyData 函数有关。
但我使用 ARC,所以我不需要释放我的“数据”数组吗?
【问题讨论】:
-
ARC 不会为您管理 Core Foundation 对象。
-
那么我应该释放哪个对象?如何 ?因为我做不到[对象释放]
-
我做了:CGDataProviderRef provider = CGImageGetDataProvider(imageRef);和 CFRelease(提供者);之后,但我仍然从 CGImageGetDataProvider 得到内存泄漏
-
@JeanFrançoisManatane:
&data不是一个对象;它是一个变量的地址。但是,data确实引用了一个对象。
标签: ios memory-leaks core-graphics ios7