0

我正在尝试使用 MacRuby 在 NSOperation 中进行一些 CoreGraphics/CoreImage 操作。我有一些 API 调用将源文件读入 CG 并设置 CGImageDestination。

如果我将以下代码放入 NSOperation.init 中,一切正常:

@dest = CGImageDestinationCreateWithURL(@photo.output_url, "public.jpeg" , 1, nil);
@context = CIContext.alloc.init

@cgOriginalImgSrc = CGImageSourceCreateWithURL(@photo.url, nil)
@cgOriginal       = CGImageSourceCreateImageAtIndex(@cgOriginalImgSrc, 0, nil)    

但是,如果我将相同的代码放入 NSOperation 的主函数中,则会出现零星的 EXC_BAD_ACCESS 错误。并且仅在将 NSOperation 传递给 NSOperationQueue 时;如果我自己调用 main ,它工作得很好。

在我运行的主要部分结束时:

CFRelease(@dest)    
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)

更奇怪的是它在 init 中工作,即使 init 不是从主线程调用的(所以不是主线程/后台线程问题,我猜)

有什么想法吗?

4

1 回答 1

1

看起来您的一个线程正在引用一个不再存在于内存中的对象。尝试删除

CFRelease(@dest)    
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)

看看情况如何。您也可以尝试验证每个队列中的对象以查看它们是否仍然可用。最后,您可以使用 macrubyd(MacRuby 的调试器)来查看发生了什么,甚至可以使用 GDB 并粘贴回溯,以便我们查看问题所在。

谢谢,

  • 马特
于 2011-03-21T05:43:50.283 回答