我從磁盤讀取的圖像轉換成一個UIImage之外定義C指針對象(CGImageRef),以及在用於媒體處理另一個工作隊列塊使用其CGImage。記憶問題,使用在GCD調度隊列塊
現在我得到EXC_BAD_ACCESS如果我在主隊列定義CGImageRef,並在工作隊列使用CGImageRef。就像這樣:
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結構體的指針。在第一種情況下,我可以使用它的CGImage之前發佈UIImage。
我的問題是我怎麼能直接用在另一調度隊列在主隊列定義的C指針?
Duplicate http://stackoverflow.com/questions/12756295/uiimage-from-cgimageref? –
在兩種不同的情況下,這是相同的原因。謝謝,該主題中的討論非常豐富! –