获取[Not a type retain]和[Not a type class]消息发送到解除分配的实例

时间:2012-10-23 03:38:46

标签: objective-c ios

我正在开发一款可以观看网络摄像头视频的应用。现在我想使用后台线程添加新的记录视频功能。

<。>文件中的

@property (nonatomic, retain) UIImage *image;
@property (nonatomic, retain) NSData *imageData;
<。>在.m文件中。当用户按下录制按钮时,它开始将ImageData保存到Documents Dir

@synthesize image;
@synthesize imageData
...

- (void) playVideo:(NSData *)data { 
        ...
     // play video code
     CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
     CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
     CGImageRef cgImage = CGImageCreate(width, hieght, 8, 24,
                            bpp * width, colorSpace, bitmapInfo,
                            provider, NULL, NO, kCGRenderingIntentDefault); 
    CGColorSpaceRelease(colorSpace);
    [videoImage = [setImage: UIImage imageWithCGImage:cgImage]];

    CGImageRelease(cgImage);
    CGDataProviderRelease(provider);
    // play video code end
    ...
    if(record == TRUE) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
            (unsigned long)NULL), ^(void) {
            image = [UIImage imageWithCGimage:cgImage];
            imageData = [UIImageJPEGRepresentation(image, 1)];
            [imageData writeToFile:DirPath atomically:NO];
        });
    }
}

播放视频代码似乎到目前为止工作正常。然后我在它下面添加线程并收到错误消息

[Not a type retain]: message sent to deallocated instance 
[Not a type class]: message sent to deallocated instance
在线程
image = [UIImage imageWithCGimage:cgImage];
中 你能告诉我为什么会这样吗?或者有其他方法可以做到这一点。感谢。

2 个答案:

答案 0 :(得分:1)

您在发送之前释放cgImage。 - &GT; CGImageRelease(cgImage);
将此行移动到块的末尾(内部)。

答案 1 :(得分:0)

如果cgImage属于CGImageRef类型,则表示它是指向C结构的指针,尝试将其转换为Objective-C对象:

        //set play video code like this
        [videoImage setImage: [UIImage imageWithCGImage:(id)cgImage]];