ディスクから 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 ポインターを別のディスパッチ キューで直接使用するにはどうすればよいですか?