我正在将图像从磁盘读取到 UIImage 中,并在另一个工作队列块中使用其 CGImage 进行媒体处理。
现在,如果我在主队列中定义 CGImageRef 并在工作队列中使用 CGImageRef,我将得到 EXC_BAD_ACCESS。像这样:
UIImage *uiimage = [UIImage imageWithContentsOfFile:[aPhoto completeLargeThumbFilePath]];
CGImageRef cgImage = uiimage.CGImage;
dispatch_queue_t dispatchQueue = dispatch_queue_create("mediaInputQueue", NULL);
[writerInput requestMediaDataWhenReadyOnQueue:dispatchQueue usingBlock:^{
// ... unrelated stuff
CVPixelBufferRef buffer = (CVPixelBufferRef)[self pixelBufferFromCGImage:cgImage size:size];
// ... unrelated stuff
}];
如果我直接在工作队列中使用 uiimage.CGImage,那么我不会得到异常。我认为这与ARC内存管理有关。UIImage 是一个objective-c 对象,CGImageRef 是一个指向C 结构的指针。UIImage 在我可以在第一种情况下使用它的 CGImage 之前被释放。
我的问题是如何在另一个调度队列中直接使用主队列中定义的 C 指针?