我想出了一个错误“ * - [UIImage发布]:发送到解除分配实例的消息”。这就是我在做的事情。
void imageFromPicture(AVPicture *pict, int width, int height)
{
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, pict->data[0], pict->linesize[0]*height,kCFAllocatorNull);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef cgImage = CGImageCreate( width,
height,
8,
24,
pict->linesize[0],
colorSpace,
bitmapInfo,
provider,
NULL,
NO,
kCGRenderingIntentDefault);
CGColorSpaceRelease(colorSpace);
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);
[ref_to_self display: image];
[image release];
}
- (void) display:(UIImage*)image
{
self.ImageView.image = image;
}
现在,函数imageFromPicture在无限循环中被连续调用,直到某些中断条件。这用于显示连续的图像序列。此代码正常运行,但在显示所有图像并且控件返回操作系统后,我收到此错误。
有人可以告诉我,我做错了什么。我对目标C内存管理没有太多了解。
答案 0 :(得分:1)
这一行
UIImage *image = [UIImage imageWithCGImage:cgImage];
返回一个自动释放的对象,所以这一行
[image release];
是不必要且无效的。