我正在开发一款可以观看网络摄像头视频的应用。现在我想使用后台线程添加新的记录视频功能。
<。>文件中的
@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];
中
你能告诉我为什么会这样吗?或者有其他方法可以做到这一点。感谢。
答案 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]];