UIImage发布错误 - *** - [UIImage发布]:发送到解除分配的实例的消息

时间:2011-08-22 07:09:14

标签: objective-c ios uiimage

我想出了一个错误“ * - [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内存管理没有太多了解。

1 个答案:

答案 0 :(得分:1)

这一行

UIImage *image = [UIImage imageWithCGImage:cgImage];

返回一个自动释放的对象,所以这一行

[image release];

是不必要且无效的。