我正在尝试使用MacRuby在NSoperation内部进行一些核心图/核心图操作。我有一些API调用,可以将源文件读取到CG中并设置CgimagedSestination。

如果我将以下代码放入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错误。并且只有将NSOPRIENT传递到NsoperationQueue时;如果我自己调用主要,它可以正常工作。

在主要的末尾,我正在运行:

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

即使不是从主线程调用init(因此不是主线程/背景线程问题,我猜),即使没有从init中起作用),即

有什么想法吗?

有帮助吗?

解决方案

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

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

看看情况如何。另外,您可以尝试在每个队列中验证对象,以查看它们是否仍然可用。最后,您可以使用MacRubyd(Macruby的调试器)查看正在发生的事情,甚至使用GDB并粘贴回底带,以便我们可以看到问题出在哪里。

谢谢,

  • 马特
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top