来自NSOperation的CoreGraphics API的EXC BAD ACCESS

时间:2011-01-09 15:44:55

标签: core-graphics nsoperation nsoperationqueue macruby core-image

我正在尝试使用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的main函数中,我会得到零星的EXC_BAD_ACCESS错误。并且只有在将NSOperation传递给NSOperationQueue时;如果我自己调用main,它就可以正常工作。

在我正在运行的主要结束时:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

看起来你的一个线程指的是一个在内存中不再存在的对象。尝试删除

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

看看它是怎么回事。您还可以尝试验证每个队列中的对象,看它们是否仍然可用。最后,您可以使用Macruby的调试器macrubyd查看正在发生的事情,甚至使用GDB并粘贴回溯,以便我们可以看到问题所在。

谢谢,

  • 马特