我正在尝试使用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没有从主线程调用(所以不是主线程/后台线程问题,我猜)
有什么想法吗?
答案 0 :(得分:1)
看起来你的一个线程指的是一个在内存中不再存在的对象。尝试删除
CFRelease(@dest)
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)
看看它是怎么回事。您还可以尝试验证每个队列中的对象,看它们是否仍然可用。最后,您可以使用Macruby的调试器macrubyd查看正在发生的事情,甚至使用GDB并粘贴回溯,以便我们可以看到问题所在。
谢谢,